Если вы расширяете класс в Python, как вы импортируете другой класс и используете его? - PullRequest
0 голосов
/ 10 декабря 2011

Итак, я поиграюсь с Scrapy, который представляет собой набор классов, позволяющих вам выполнять очистку веб-страниц, и я хотел выбросить некоторые данные в базу данных, но у меня сложный импорт методов MySQL при расширении scrapyбиблиотека.

вот мой код:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
import MySQLdb

class test(BaseSpider): #if i don't extend the class the MySQL works, but the Scrapy functionallity does not. 
    name = "test"
    allowed_domains = ["some-website.com"] #i know this is probibly not a real websit... just using it as an example. 
    start_urls = [
        "http://some-website.com",
    ]

    db = MySQLdb.connect(
       host = 'localhost',
       user = 'root',
       passwd = '',
       db = 'scrap'
    )
    #cursor = db.cursor()

    def parse(self, response):
       hxs = HtmlXPathSelector(response)
       for title in hxs.select('//a[@class="title"]/text()').extract():
            print title
            cursor.execute("INSERT INTO `scrap`.`shows` (id, title) VALUES (NULL , '"+title+"');")

Я все еще новичок в Python, поэтому любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 10 декабря 2011

Что-то не так с вашей архитектурой .

Работа Spider - анализировать страницы, извлекать данные и помещать их в Item .Это конвейерная работа по сохранению данных из элемента в базе данных:

Типичное использование для конвейеров элементов:

  • очистка данных HTML
  • проверка очищенных данных (проверка того, что элементы содержат определенные поля)
  • проверка на наличие дубликатов (и их удаление)
  • хранение очищенного элемента в базе данных

Итак, создайте конвейер, поместите его путь в settings.py .Попробуйте поработать с БД в этом конвейере.

Я думаю, вам нужно прочитать учебник и посмотреть примеры .

0 голосов
/ 10 декабря 2011

Может быть, вы должны определить self.cursor?
Таким образом, курсор будет доступен для методов класса. Я не знаю о scrapy, но, скорее всего, вы должны сделать это с помощью метода __init__ или метода get_cursor теста класса (который, вероятно, следует переименовать в Test)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...