Scrapy получить уведомление, когда все пауки закрыты - PullRequest
0 голосов
/ 25 марта 2020

Я использую django для запуска сканирующих сканирований с

scrapyd = ScrapydAPI('http://localhost:6800')
spiders = scrapyd.list_spiders("default")
for spider in spiders:
        scrapyd.schedule("default", spider, list_id=list.id, spiders_number=3)

Могу ли я подключить всех пауков, связанных с одним запросом, на основе list_id. Я sh получу информацию, когда все пауки закончат свою работу. Просто отправить эту информацию от паука на django (я могу получить экземпляр модели django и обновить его). Но я не знаю, является ли текущий паук последним, который работал.

Можно ли обмениваться данными между пауками? Есть ли какой-нибудь известный подход для этого?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Scrapyd-API не запускает несколько пауков (заданий) одновременно, поэтому получите список из scrapyd.list_spiders("default") в терминале, последний из пауков в списке будет последним, который будет запущен. Тогда просто в этот паук добавить

def close(self):
    #send notification()
0 голосов
/ 26 марта 2020

В конвейере скрапа существует метод события, называемый close_spider, который вызывается непосредственно перед тем, как паук готов и закрывается.

https://docs.scrapy.org/en/latest/topics/item-pipeline.html

НО, поскольку вы перебираете всех пауков, это будет бесполезно. Единственное решение, которое я мог придумать, - это вызвать уведомление о последнем l oop.

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