每次抓取后如何捕获“ finish_reason”

时间:2019-05-01 13:12:53

标签: python scrapy

我试图在每次爬网后抓取“ finish_reason”并将此信息插入数据库。在收集第一项之前,将在管道中创建爬网实例。

似乎我必须使用“ engine_stopped”信号,但是找不到有关如何或在何处放置代码来执行此操作的示例?

1 个答案:

答案 0 :(得分:0)

一种可能的选择是覆盖scrapy.statscollectors.MemoryStatsCollectordocscode),这是close_spider方法:

middleware.py

import pprint
from scrapy.statscollectors import MemoryStatsCollector, logger

class MemoryStatsCollectorSender(MemoryStatsCollector):
    #Override close_spider method
    def close_spider(self, spider, reason):
        #finish_reason in reason variable
        #add your data sending code here
        if self._dump:
            logger.info("Dumping Scrapy stats:\n" + pprint.pformat(self._stats),
                        extra={'spider': spider})
        self._persist_stats(self._stats, spider)

将新创建的统计信息收集器类添加到settings.py

STATS_CLASS = 'project.middlewares.MemoryStatsCollectorSender'
#STATS_CLASS = 'scrapy.statscollectors.MemoryStatsCollector'