Сбор статистики

Scrapy предоставляет удобное средство для сбора статистики в виде пар «ключ-значение», где значения часто являются счетчиками. Это средство называется сборщиком статистики, и к нему можно получить доступ через атрибут stats в Crawler API, как показано в примерах в разделе Обычный сборщик статистики использует ниже.

Однако сборщик статистики всегда доступен, поэтому вы всегда можете импортировать его в свой модуль и использовать его API (для увеличения или установки новых ключей статистики), независимо от того, включён ли сбор статистики или нет. Если он отключён, API все равно будет работать, но ничего не будет собирать. Это нацелено на упрощение использования сборщика статистики: вы должны тратить не более одной строки кода на сбор статистики в вашем пауке, расширении Scrapy или любом другом коде, из которого вы используете сборщик статистики.

Другой особенностью сборщика статистики является то, что он очень эффективен (когда включён) и чрезвычайно эффективен (почти незаметен), когда он отключён.

Сборщик статистики хранит таблицу статистики для каждого открытого паука, которая автоматически открывается, когда паук открывается, и закрывается, когда паук закрывается.

Обычный сборщик статистики использует

Доступ к сборщику статистики осуществляется через атрибут stats. Вот пример расширения для доступа к статистике:

class ExtensionThatAccessStats:

    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, такой как парсинг страниц.