Трубопровод Scrapy spider_opened и spider_closed не вызывается - PullRequest
12 голосов
/ 06 ноября 2010

У меня возникли проблемы с трубопроводом для очистки. Моя информация очищается с сайтов в порядке, и метод process_item вызывается правильно. Однако методы spider_opened и spider_closed не вызываются.

class MyPipeline(object):

    def __init__(self):
        log.msg("Initializing Pipeline")
        self.conn = None
        self.cur = None

    def spider_opened(self, spider):
        log.msg("Pipeline.spider_opened called", level=log.DEBUG)

    def spider_closed(self, spider):
        log.msg("Pipeline.spider_closed called", level=log.DEBUG)

    def process_item(self, item, spider):
        log.msg("Processsing item " + item['title'], level=log.DEBUG)

Сообщения журнала __init__ и process_item отображаются в журнале, а сообщения журнала spider_open и spider_close - нет.

Мне нужно использовать методы spider_opened и spider_closed, так как я хочу использовать их для открытия и закрытия соединения с базой данных, но в журнале для них ничего не отображается.

Если кто-нибудь и предложил, это было бы очень полезно.

Ответы [ 2 ]

9 голосов
/ 06 ноября 2010

Извините, нашел его сразу после того, как я опубликовал это.Вы должны добавить:

dispatcher.connect(self.spider_opened, signals.spider_opened)
dispatcher.connect(self.spider_closed, signals.spider_closed)

в __init__, иначе он никогда не получит сигнал для его вызова

5 голосов
/ 12 мая 2014

Правильные имена методов: open_spider и close_spider, а не spider_opened и spider_closed.Здесь задокументировано: http://doc.scrapy.org/en/latest/topics/item-pipeline.html#writing-your-own-item-pipeline.

...