统计数据收集

Scrapy 提供了一个方便的机制来收集以键值对形式存在的统计数据,其中值通常是计数器。该机制称为统计数据收集器,可以通过 stats 属性访问 Crawler API,如下面的 常见的统计数据收集器用法 部分中的示例所示。

但是,统计数据收集器始终可用,因此您始终可以在模块中导入它并使用其 API(递增或设置新的统计数据键),而无论统计数据收集是否启用。如果它被禁用,API 仍然可以工作,但不会收集任何内容。这旨在简化统计数据收集器的使用:您应该在爬虫、Scrapy 扩展或您使用统计数据收集器的任何代码中花费不超过一行代码来收集统计数据。

统计数据收集器的另一个特性是它在启用时非常高效,在禁用时非常高效(几乎不可察觉)。

统计数据收集器为每个打开的爬虫维护一个统计数据表,该表在爬虫打开时自动打开,在爬虫关闭时自动关闭。

常见的统计数据收集器用法

通过 stats 属性访问统计数据收集器。这是一个访问统计数据的扩展示例

class ExtensionThatAccessStats:
    def __init__(self, stats):
        self.stats = stats

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.stats)

设置统计数据值

stats.set_value("hostname", socket.gethostname())

递增统计数据值

stats.inc_value("custom_count")

仅当大于先前值时设置统计数据值

stats.max_value("max_items_scraped", value)

仅当小于先前值时设置统计数据值

stats.min_value("min_free_memory_percent", value)

获取统计数据值

>>> stats.get_value("custom_count")
1

获取所有统计数据

>>> stats.get_stats()
{'custom_count': 1, 'start_time': datetime.datetime(2009, 7, 14, 21, 47, 28, 977139)}

可用的统计数据收集器

除了基本的 StatsCollector 之外,Scrapy 中还有其他可用的统计数据收集器,它们扩展了基本的统计数据收集器。您可以通过 STATS_CLASS 设置选择要使用的统计数据收集器。默认使用的统计数据收集器是 MemoryStatsCollector

内存统计数据收集器

class scrapy.statscollectors.MemoryStatsCollector[source]

一个简单的统计数据收集器,它在关闭后将上次抓取运行(对于每个爬虫)的统计数据保存在内存中。可以通过 spider_stats 属性访问统计数据,该属性是一个字典,以爬虫域名作为键。

这是 Scrapy 中使用的默认统计数据收集器。

spider_stats

一个字典的字典(以爬虫名称为键),包含每个爬虫上次抓取运行的统计数据。

哑元统计数据收集器

class scrapy.statscollectors.DummyStatsCollector[source]

一个什么都不做的统计数据收集器,但非常高效(因为它什么都不做)。可以通过 STATS_CLASS 设置来设置此统计数据收集器,以禁用统计数据收集以提高性能。但是,统计数据收集的性能损失通常与解析页面等其他 Scrapy 工作负载相比可以忽略不计。