gpt4 book ai didi

python - Scrapy - 在蜘蛛运行时获取或刷新统计数据

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:51 25 4
gpt4 key购买 nike

有没有办法刷新当前运行 爬网的统计信息(抓取的页面/项目)?我正在爬行很长时间,偶尔会出现到目前为止的统计数据,但很快就会被更多信息推开。如果可能的话,我想定期检查这些统计数据 - 这样我就大致知道需要多长时间,或者我是否应该过早完成。

作为它的一个子问题 - 是否有一种方法可以杀死蜘蛛,这样到目前为止已经抓取的内容仍然会输出到指定的输出文件? (-o 标志)

如有任何帮助,我们将不胜感激。

最佳答案

正如@kiran.koduru 提到的,您可以将扩展与twistedLoopingCall 类一起使用,以在给定的时间间隔内保存统计数据。

例如:

from scrapy import signals
from twisted.internet.task import LoopingCall


class PersistStats(object):
"""An extension to persist stats on a given interval.

Settings
--------
PERSIST_STATS_INTERVAL : integer (default: 60)
Interval in seconds.

"""

def __init__(self, interval):
self.interval = interval
self.tasks = {}

@classmethod
def from_crawler(cls, crawler):
obj = cls(crawler.settings.getint('PERSIST_STATS_INTERVAL', 60))
crawler.signals.connect(obj.spider_opened, signal=signals.spider_opened)
crawler.signals.connect(obj.spider_closed, signal=signals.spider_closed)
return obj

def spider_opened(self, spider):
task = self.tasks[spider.name] = LoopingCall(self.perist_stats, spider)
task.start(self.interval)

def spider_closed(self, spider):
task = self.tasks.pop(spider.name)
task.stop()

def perist_stats(self, spider):
# TODO: store stats somewhere.
data = spider.crawler.stats.get_stats()
spider.logger.info("Persisting stats:\n%s", data)

关于你的第二个问题,如果你优雅地杀死蜘蛛(一个CTRL+C),它应该正确地存储文件。否则,您将需要提供自己的提要导出器或扩展程序以将项目直接写入目标文件,而不是在临时文件中进行缓冲。

关于python - Scrapy - 在蜘蛛运行时获取或刷新统计数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34799320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com