scrapy 2.3 統(tǒng)計數(shù)據(jù)集合

2021-06-10 17:20 更新

Scrapy提供了一種方便的工具,可以以鍵/值的形式收集統(tǒng)計信息,其中值通常是計數(shù)器。該工具稱為stats collector,可以通過 ?stats? 的屬性 爬蟲API ,如中的示例所示 常用統(tǒng)計信息收集器使用 下面部分。

但是,stats collector始終可用,因此無論stats集合是否啟用,您都可以將其導入模塊并使用其API(以增加或設置新的stat鍵)。如果它被禁用,API仍然可以工作,但它不會收集任何東西。這是為了簡化StatsCollector的用法:在spider、scrappy擴展名或從中使用StatsCollector的任何代碼中,收集統(tǒng)計信息的代碼不應超過一行。

StatsCollector的另一個特性是,它在啟用時非常高效,在禁用時非常高效(幾乎不明顯)。

stats收集器為每個打開的spider保留一個stats表,該表在spider打開時自動打開,在spider關閉時關閉。

常用統(tǒng)計信息收集器使用

通過訪問Stats Collector ?stats? 屬性。以下是訪問統(tǒng)計信息的擴展示例:

class ExtensionThatAccessStats:

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

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

設置統(tǒng)計值:

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

增量統(tǒng)計值:

stats.inc_value('custom_count')

僅當大于上一個值時設置stat值::

stats.max_value('max_items_scraped', value)

僅當?shù)陀谏弦粋€時設置stat值::

stats.min_value('min_free_memory_percent', value)

獲取統(tǒng)計值:

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

獲取所有統(tǒng)計信息:

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

可用的統(tǒng)計信息收集器

除了基本的 ?StatsCollector Scrapy?中還有其他可用的統(tǒng)計數(shù)據(jù)收集器,它們擴展了基本統(tǒng)計數(shù)據(jù)收集器。您可以通過 ?STATS_CLASS? 設置。使用的默認統(tǒng)計信息收集器是 ?MemoryStatsCollector? .

MemoryStatsCollector

classscrapy.statscollectors.MemoryStatsCollector

一個簡單的統(tǒng)計信息收集器,它在關閉后將上次(每個蜘蛛)抓取運行的統(tǒng)計信息保存在內(nèi)存中。可以通過 ?spider_stats? 屬性,它是由蜘蛛域名鍵入的dict。

這是Scrapy中使用的默認統(tǒng)計信息收集器。

spider_stats

包含每個蜘蛛最后一次抓取運行的統(tǒng)計信息的dict的dict(由蜘蛛名稱鍵控)。

DummyStatsCollector

classscrapy.statscollectors.DummyStatsCollector

一個只做非常有效的統(tǒng)計數(shù)據(jù)收集器(因為它什么也不做)。此統(tǒng)計信息收集器可以通過 ?STATS_CLASS? 設置,以禁用統(tǒng)計信息收集以提高性能。但是,與其他零碎的工作負載(如解析頁面)相比,統(tǒng)計數(shù)據(jù)收集的性能損失通常是微乎其微的。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號