统计收集

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工作负载相比,统计收集的性能损失通常很小。