我正在尝试记录我的抓取工具的结束时间。当scrapy完成时,它将scrapy统计信息转储到日志中。我一直在尝试使用管道来使用close_spider方法记录这些统计信息。
我将统计信息作为管道的一个字段(self.stats)。
def close_spider(self,spider):
record_crawl_stats(self.stats)
问题是调用它时'finish_time'不可用。
我试图找到一种方法来获取与最终倾倒的数据相同的统计数据。
(我可以获得完成时间的datetime.now(),但是还有一些我想要访问的其他统计数据也是不可用的,例如完成原因,我相信创建的项目数量)
通过研究,我找到了类似问题的一些答案,刮刀处理蜘蛛关闭。但是,由于各种原因,这两者中的代码与当前版本的scrapy不兼容。
https://stackoverflow.com/a/13799984/5078308
https://stackoverflow.com/a/11246025/5078308
有没有人知道如何更新最新版本的相似功能或解决此问题的不同方法?
答案 0 :(得分:2)
我通过修改我链接的一些答案找到了答案。
基本上,要获得完成时间值,需要在蜘蛛关闭后访问统计数据。看来这对于close_spider管道方法来说并非如此。这就是你需要使用scrapy发送的spider_closed信号的原因。这是我处理此场景的所有代码。
from scrapy.xlib.pydispatch import dispatcher
from scrapy import signals
def __init__(self, stats, settings):
self.stats = stats
dispatcher.connect(self.save_crawl_stats,signals.spider_closed)
@classmethod
def from_crawler(cls, crawler):
return cls(crawler.stats,crawler.settings)
def save_crawl_stats(self):
record_crawl_stats(self.cur,self.stats,self.crawl_instance)