Как получить значение статистики после завершения CrawlerProcess, то есть в строке после process.start () - PullRequest
0 голосов
/ 23 октября 2018

Я использую этот код где-то внутри паука:

raise scrapy.exceptions.CloseSpider('you_need_to_rerun')

Итак, когда возникли эти исключения, в конце концов мой паук закрывается, и я получаю в консоли статистику с этой строкой:

'finish_reason': 'you_need_to_rerun',

Но - как я могу получить это из кода?Потому что я хочу снова запустить spider в цикле, основываясь на информации из этой статистики, что-то вроде этого:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
import spaida.spiders.spaida_spider
import spaida.settings


you_need_to_rerun = True
while you_need_to_rerun:
    process = CrawlerProcess(get_project_settings())
    process.crawl(spaida.spiders.spaida_spider.SpaidaSpiderSpider)
    process.start(stop_after_crawl=False)  # the script will block here until the crawling is finished
    finish_reason = 'and here I get somehow finish_reason from stats' # <- how??
    if finish_reason == 'finished':
        print("everything ok, I don't need to rerun this")
        you_need_to_rerun = False

Я нашел это в документации, но не могу понять, где это "Доступ к статистике можно получить с помощью атрибута spider_stats, который является вогнутым ключом по имени домена паука. ": https://doc.scrapy.org/en/latest/topics/stats.html#scrapy.statscollectors.MemoryStatsCollector.spider_stats

PS: Я также получаю ошибку twisted.internet.error.ReactorNotRestartable при использовании process.start()и рекомендации по использованию process.start(stop_after_crawl=False) - и тогда паук просто останавливается и ничего не делает, но это еще одна проблема ...

1 Ответ

0 голосов
/ 23 октября 2018

Вам необходимо получить доступ к объекту статистики через Crawler объект:

process = CrawlerProcess(get_project_settings())
crawler = process.crawlers[0]
reason = crawler.stats.get_value('finish_reason')
...