统计信息收集
Scrapy 提供了一个便利的功能,用于以键/值对的形式收集统计信息,其中值通常是计数器。此功能称为统计信息收集器 (Stats Collector),可以通过 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。
MemoryStatsCollector
- class scrapy.statscollectors.MemoryStatsCollector[source]
一个简单的统计信息收集器,它在爬虫关闭后,会将上次抓取运行(每个爬虫)的统计信息保留在内存中。可以通过
spider_stats属性访问这些统计信息,该属性是一个以爬虫域名为键的字典。这是 Scrapy 中使用的默认统计信息收集器。
- spider_stats
一个由字典组成的字典(以爬虫名称为键),包含每个爬虫上次抓取运行的统计信息。
DummyStatsCollector
- class scrapy.statscollectors.DummyStatsCollector[source]
一个统计信息收集器,它不做任何事情,但非常高效(因为它什么也不做)。可以通过
STATS_CLASS设置来启用此统计信息收集器,以禁用统计信息收集从而提高性能。然而,与解析页面等其他 Scrapy 工作负载相比,统计信息收集的性能开销通常微不足道。