统计收集
Scrapy 提供了一个方便的工具,用于以键/值对的形式收集统计数据,其中值通常是计数器。这个工具称为 Stats Collector,可以通过 Crawler API 的 stats
属性访问,具体示例见下方的Stats Collector 的常见用法部分。
但是,Stats Collector 始终可用,因此无论是否启用统计数据收集,您都可以随时在模块中导入并使用其 API(递增或设置新的统计键)。如果它被禁用,API 仍然有效,但不会收集任何数据。这样做的目的是简化 Stats Collector 用法:在爬虫、Scrapy 扩展或任何使用 Stats Collector 的代码中,您只需一行代码即可进行统计收集。
Stats Collector 的另一个特点是,它在启用时效率很高,在禁用时效率极高(几乎不会引起注意)。
Stats Collector 为每个开启的爬虫维护一个统计表,该表在爬虫开启时自动开启,在爬虫关闭时自动关闭。
Stats Collector 的常见用法
通过 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)}
可用的 Stats Collector
除了基本的 StatsCollector
,Scrapy 中还有其他继承了基础 Stats Collector 的可用 Stats Collector。您可以通过 STATS_CLASS
设置来选择使用的 Stats Collector。默认使用的 Stats Collector 是 MemoryStatsCollector
。
MemoryStatsCollector
- class scrapy.statscollectors.MemoryStatsCollector[source]
一个简单的统计收集器,它在爬虫关闭后将上次运行(针对每个爬虫)的统计数据保存在内存中。这些统计数据可以通过
spider_stats
属性访问,该属性是一个以爬虫域名为键的字典。这是 Scrapy 中默认使用的 Stats Collector。
- spider_stats
一个字典的字典(以爬虫名称为键),包含每个爬虫上次抓取运行的统计数据。
DummyStatsCollector
- class scrapy.statscollectors.DummyStatsCollector[source]
一个不做任何事情但效率极高(因为它什么都不做)的统计收集器。可以通过
STATS_CLASS
设置此收集器,以禁用统计数据收集,从而提高性能。然而,与页面解析等其他 Scrapy 工作负载相比,统计收集的性能损失通常微不足道。