Scrapy管道spider_opened和spider_closed没有被调用

Jim*_*ies 13 python pipeline scrapy

我在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)
Run Code Online (Sandbox Code Playgroud)

无论是__init__process_item日志消息持续显示在日志中,但spider_openspider_close日志消息都没有.

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

如果有人有任何建议会非常有用.

Jim*_*ies 10

对不起,我发布之后发现它.你必须添加:

dispatcher.connect(self.spider_opened, signals.spider_opened)
dispatcher.connect(self.spider_closed, signals.spider_closed)
Run Code Online (Sandbox Code Playgroud)

__init__否则它永远不会接收到信号叫它

  • 为此,您需要确保从scrapy导入信号中导入以下内容:`from scrapy.xlib.pydispatch import dispatcher`` (6认同)

Mik*_*bov 5

正确的方法名称是open_spiderclose_spider,而不是spider_openedspider_closed.它在此处记录:http://doc.scrapy.org/en/latest/topics/item-pipeline.html#writing-your-own-item-pipeline.

  • 为什么不能在打开或关闭蜘蛛时调用的`open_spider`和`close_spider`方法中执行这些操作? (4认同)
  • 这是不正确的.`spider_open`和`spider_closed`是信号而不是方法.正如此处所述http://doc.scrapy.org/en/latest/topics/signals.html?highlight=spider_opened#std:signal-spider_opened和http://doc.scrapy.org/en/latest/topics/ signals.html突出= spider_closed#STD:信号spider_closed (3认同)