Scrapy管道中spider_opened和spider_closed未被调用

13 投票
2 回答
7848 浏览
提问于 2025-04-16 06:40

我在使用 scrapy 的管道时遇到了一些问题。我从网站上抓取的信息没问题,process_item 方法也能正常调用。但是,spider_openedspider_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_openedspider_closed 方法,因为我想用它们来打开和关闭与数据库的连接,但在日志中什么也没有显示。

如果有人有建议,那将非常有帮助。

2 个回答

6

正确的方法名称是 open_spiderclose_spider,而不是 spider_openedspider_closed。具体的说明可以在这里找到: http://doc.scrapy.org/en/latest/topics/item-pipeline.html#writing-your-own-item-pipeline

11

抱歉,我在发帖后刚发现这个问题。你需要添加:

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

__init__里面,否则它永远收不到调用的信号。

撰写回答