Skip to main content

统计数据

Scrapy提供了一种便利的方式用于以键/值的形式收集统计信息,其中值通常是计数器。该设施称为统计收集器,可以通过 抓取工具APIstats 属性访问,如下面 收集器使用的常见统计信息 部分中的示例所示。

但是,Stats Collector始终可用,因此无论统计信息收集是否已启用,您都可以将其导入模块并使用其API(增加或设置新的统计信息键)。如果它被禁用,API仍然可以工作,但它不会收集任何东西。这是为了简化stats收集器的使用:你应该花费不超过一行代码收集stats在您的蜘蛛,Scrapy扩展或任何代码,你使用Stats收集器从。

Stats Collector的另一个特性是它非常高效(启用时)和非常高效(几乎不可察觉)时禁用。

统计收集器保持每个开放蜘蛛的统计表,其在蜘蛛打开时自动打开,并且当蜘蛛关闭时关闭。

收集器使用的常见统计信息

通过 stats 属性访问stats收集器。以下是访问统计信息的扩展示例:

class ExtensionThatAccessStats(object):

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

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

设置统计值:

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

增加stat值:

stats.inc_value('custom_count')

仅在大于上一个时设置统计值:

stats.max_value('max_items_scraped', value)

仅在低于上一个时设置统计值:

stats.min_value('min_free_memory_percent', value)

获取stat值:

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

获取所有统计信息:

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

可用统计信息收集器

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

MemoryStatsCollector

class scrapy.statscollectors.MemoryStatsCollector

一个简单的stats收集器,保存最后一次抓取运行(每个蜘蛛)在内存中的统计数据,在它们关闭后。可以通过 spider_stats 属性访问统计信息,spider_stats 属性是由蜘蛛域名关键的dict。

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

spider_stats

包含每个蜘蛛的最后一次刮擦运行的统计数据的词典(由蜘蛛名称键入)。

DummyStatsCollector

class scrapy.statscollectors.DummyStatsCollector

一个Stats收集器,什么都不做,但是非常有效(因为它什么也不做)。可以通过 STATS_CLASS 设置设置此stats收集器,禁用收集的统计信息以提高性能。但是,与其他Scrapy工作负载(如解析页面)相比,stats集合的性能损失通常是微不足道的。