统计收集¶
Scrapy 提供了一种方便的机制,以键/值的形式收集统计数据,其中值通常是计数器。这种机制被称为统计收集器,可以通过 stats 属性访问 Crawler API,如下面的 常见统计收集器使用 部分中的示例所示。
然而,统计收集器始终可用,因此无论统计收集是否启用,您都可以在模块中导入它并使用其API(增加或设置新的统计键)。如果它被禁用,API仍然可以工作,但不会收集任何数据。这旨在简化统计收集器的使用:在您的爬虫、Scrapy扩展或任何使用统计收集器的代码中,您应该只需一行代码来收集统计信息。
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)}
可用的统计收集器¶
除了基本的StatsCollector之外,Scrapy中还有其他扩展了基本统计收集器的统计收集器。您可以通过STATS_CLASS设置选择使用哪个统计收集器。默认使用的统计收集器是MemoryStatsCollector。
MemoryStatsCollector¶
- class scrapy.statscollectors.MemoryStatsCollector[源代码]¶
一个简单的统计收集器,它在每个爬虫关闭后,将最后一次爬取运行的统计信息保存在内存中。这些统计信息可以通过
spider_stats属性访问,该属性是一个以爬虫域名为键的字典。这是Scrapy中使用的默认统计收集器。
- spider_stats¶
一个字典的字典(按爬虫名称键控),包含每个爬虫最后一次抓取运行的统计信息。
虚拟统计收集器¶
- class scrapy.statscollectors.DummyStatsCollector[source]¶
一个什么都不做但非常高效的统计收集器(因为它什么都不做)。这个统计收集器可以通过
STATS_CLASS设置来禁用统计收集以提高性能。然而,与解析页面等其他Scrapy工作负载相比,统计收集的性能损失通常很小。