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

2021-06-10 17:20 更新

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

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

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

stats收集器為每個(gè)打開的spider保留一個(gè)stats表,該表在spider打開時(shí)自動(dòng)打開,在spider關(guān)閉時(shí)關(guān)閉。

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

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

class ExtensionThatAccessStats:

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

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

設(shè)置統(tǒng)計(jì)值:

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

增量統(tǒng)計(jì)值:

stats.inc_value('custom_count')

僅當(dāng)大于上一個(gè)值時(shí)設(shè)置stat值::

stats.max_value('max_items_scraped', value)

僅當(dāng)?shù)陀谏弦粋€(gè)時(shí)設(shè)置stat值::

stats.min_value('min_free_memory_percent', value)

獲取統(tǒng)計(jì)值:

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

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

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

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

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

MemoryStatsCollector

classscrapy.statscollectors.MemoryStatsCollector

一個(gè)簡單的統(tǒng)計(jì)信息收集器,它在關(guān)閉后將上次(每個(gè)蜘蛛)抓取運(yùn)行的統(tǒng)計(jì)信息保存在內(nèi)存中??梢酝ㄟ^ ?spider_stats? 屬性,它是由蜘蛛域名鍵入的dict。

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

spider_stats

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

DummyStatsCollector

classscrapy.statscollectors.DummyStatsCollector

一個(gè)只做非常有效的統(tǒng)計(jì)數(shù)據(jù)收集器(因?yàn)樗裁匆膊蛔觯?。此統(tǒng)計(jì)信息收集器可以通過 ?STATS_CLASS? 設(shè)置,以禁用統(tǒng)計(jì)信息收集以提高性能。但是,與其他零碎的工作負(fù)載(如解析頁面)相比,統(tǒng)計(jì)數(shù)據(jù)收集的性能損失通常是微乎其微的。


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)