Как захватить "finish_reason" после каждого сканирования - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь записать "finish_reason" в scrapy после каждого сканирования и вставить эту информацию в базу данных.Экземпляр сканирования создается в конвейере до сбора первого элемента.

Кажется, мне нужно использовать сигнал "engine_stopped", но я не могу найти пример того, как или где я должен поместить свой код для этого?

1 Ответ

0 голосов
/ 02 мая 2019

Один из возможных вариантов - переопределить scrapy.statscollectors.MemoryStatsCollector ( документы , код ) и метод close_spider:

middleware.py:

import pprint
from scrapy.statscollectors import MemoryStatsCollector, logger

class MemoryStatsCollectorSender(MemoryStatsCollector):
    #Override close_spider method
    def close_spider(self, spider, reason):
        #finish_reason in reason variable
        #add your data sending code here
        if self._dump:
            logger.info("Dumping Scrapy stats:\n" + pprint.pformat(self._stats),
                        extra={'spider': spider})
        self._persist_stats(self._stats, spider)

Добавление вновь созданного класса сборщика статистики в settings.py:

STATS_CLASS = 'project.middlewares.MemoryStatsCollectorSender'
#STATS_CLASS = 'scrapy.statscollectors.MemoryStatsCollector'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...