Stats Collection

Scrapy提供了一种方便的工具来收集键/值形式的统计信息,其中值通常是计数器. 该功能称为Stats Collector,可以通过Crawler APIstats属性进行访问,如下面的" Common Stats Collector使用"部分中的示例所示.

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

Stats Collector的另一个功能是(禁用时)非常高效(启用时)和极其高效(几乎不明显).

统计收集器为每个打开的蜘蛛保留一个统计表,该数据表在打开蜘蛛时自动打开,在关闭蜘蛛时关闭.

Common Stats Collector uses

通过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())

增量统计值:

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)}

Available Stats Collectors

除了基本的StatsCollector之外, StatsCollector还提供了其他的Stats Collector,可以扩展基本的Stats Collector. 您可以通过STATS_CLASS设置选择要使用的Stats Collector. 使用的默认Stats Collector是MemoryStatsCollector .

MemoryStatsCollector

class scrapy.statscollectors.MemoryStatsCollector

一个简单的统计信息收集器,用于在关闭后将上一次抓取运行的统计信息(针对每个蜘蛛)保存在内存中. 可以通过spider_stats属性访问该统计信息,该属性是由Spider域名键入的dict.

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

spider_stats

包含每个蜘蛛最后一次抓取的统计信息的dict字典(以Spider名称为键).

DummyStatsCollector

class scrapy.statscollectors.DummyStatsCollector

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