13

我在使用scrapy管道时遇到了一些麻烦。我的信息正在从网站上抓取,并且 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_openspider_close日志消息不显示。

我需要使用 spider_opened 和 spider_closed 方法,因为我想使用它们来打开和关闭与数据库的连接,但它们的日志中没有显示任何内容。

如果有人有任何建议,那将非常有用。

4

2 回答 2

11

不好意思,刚发完就找到了。您必须添加:

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

__init__否则它永远不会收到调用它的信号

于 2010-11-06T13:39:49.793 回答
6

正确的方法名称是open_spiderand close_spider,而不是spider_openedand spider_closed。它记录在这里:http ://doc.scrapy.org/en/latest/topics/item-pipeline.html#writing-your-own-item-pipeline 。

于 2014-05-12T19:02:53.480 回答