spider_closed函数未触发

4 投票
1 回答
690 浏览
提问于 2025-04-18 03:37

我想在爬虫工作完成后记录一些数据。

我在我的爬虫里面写了这个函数。

def spider_closed(self, spider):
        log.msg('The spider {0} finished working on'.format(self.name), level=log.INFO)

但是这个函数没有被调用。

我使用的是scrapy 0.20和python 2.7

请注意,我可以把任何东西记录到日志里,实际上我已经记录了很多数据,并且在我的日志文件中可以看到这些数据。所以,记录功能是正常工作的。

编辑

我想我需要发送一个信号 signals.spider_closed,但我不知道该怎么做。

1 个回答

5

你需要把你的方法作为一个 receiver 附加到 SignalManager 的信号调度器上:

from scrapy.xlib.pydispatch import dispatcher
from scrapy import signals

class MySpider(Spider):
    def __init__(self, *args, **kwargs):
        dispatcher.connect(self.spider_closed, signal=signals.spider_closed)
        super(MySpider, self).__init__(*args, **kwargs)

    def spider_closed(self, spider):
        log.msg('The spider {0} finished working on'.format(self.name), level=log.INFO)

另外,看看相关的讨论:

撰写回答