我试图在每次爬网后抓取“ finish_reason”并将此信息插入数据库。在收集第一项之前,将在管道中创建爬网实例。
似乎我必须使用“ engine_stopped”信号,但是找不到有关如何或在何处放置代码来执行此操作的示例?
答案 0 :(得分:0)
一种可能的选择是覆盖scrapy.statscollectors.MemoryStatsCollector
(docs,code),这是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'