統計をとる

Scrapyは、値が多くの場合カウンターである、キー/値の形式で統計を収集するための便利な機能を提供します。この機能は統計収集器(Stats Collector)と呼ばれ、以下の 一般的な統計収集器を使う 節の例にあるように、 クローラーAPIstats 属性を通じてアクセスできます。

ただし、統計収集器(Stats Collector)は常に使用可能なため、統計収集が有効かどうかに関係なく、モジュールにいつでもインポートして、APIを使用(新しい統計キーをインクリメントまたは設定)できます。無効にしても、APIは機能しますが、何も収集しません。これは、統計収集器の使用を簡素化することを目的としています。スパイダー、Scrapy拡張機能、または統計収集器を使用しているコードの統計を取るために、1行以上のコードを費やす必要はありません。

統計収集器(Stats Collector)のもう1つの特色は、(有効な場合)とても効率的で、無効な場合は極めて効率的(ほとんど気付かない)だということです。

統計収集器は、開いているスパイダーごとに統計テーブルを保持します。このテーブルは、スパイダーを開くと自動的に開き、スパイダーを閉じると閉じます。

一般的な統計収集器を使う

stats 属性を介して統計収集器(stats collector)にアクセスします。統計にアクセスする拡張機能の例を次に示します:

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

利用可能な統計収集器

基本的な StatsCollector に加えて、基本的な統計収集器を拡張するScrapyで利用可能な他の統計収集器があります。 STATS_CLASS 設定を使用して、使用する統計収集器を選択できます。 使用されるデフォルトの統計収集器は MemoryStatsCollector です。

MemoryStatsCollector

class scrapy.statscollectors.MemoryStatsCollector

スパイダーが閉じられた後、(各スパイダーの)最後のスクレイピング実行の統計をメモリに保持する単純な統計収集器。 統計は、 spider_stats 属性を介してアクセスできます。これは、スパイダー・ドメイン名をキーとする辞書です。

これは、Scrapyで使用されるデフォルトの統計収集器です。

spider_stats

各スパイダーの最後のスクレイピング実行の統計を含む(スパイダー名をキーとする)辞書の辞書

DummyStatsCollector

class scrapy.statscollectors.DummyStatsCollector

(何もしないので)非常に効率的ですが、何もしない統計収集器。この統計収集器は、 STATS_CLASS 設定を介して設定でき、パフォーマンスを改善するために統計収集を無効にします。 ただし、統計収集のパフォーマンス・ペナルティは、通常、ページの解析などの他のScrapyワーク・ロードと比較してわずかです。