Как остановить все пауки и двигатель сразу после выполнения условия в конвейере?

У нас есть система, написанная с помощью scrapy для обхода нескольких веб-сайтов. Существует несколько поисковых роботови несколько каскадных конвейеров для всехэлементов, передаваемых всеми поисковыми роботами. Один из компонентов конвейера запрашивает серверы Google для геокодирования адресов. Google налагает ограничение в 2500 запросов в день на IP-адреси угрожает заблокировать IP-адрес, если он продолжит запрашивать Google даже после того, как Google ответил предупреждающим сообщением: «OVER_QUERY_LIMIT».

Следовательно, я хочу знать о любом механизме, который я могу вызвать из конвейера, который полностью и немедленно остановитвсе дальнейшее сканирование/обработку всех поисковых роботов, а также основного механизма.

Я проверил другие подобные вопросы, и их ответы не сработали:

из сканера импорта scrapy.project
Crawler._signal_shutdown(9,0) #Выполнить, если cnxn не работает.

это не работает, поскольку пауку требуется время, чтобы остановить выполнение, и, следовательно, в Google поступает гораздо больше запросов (которые потенциально могут заблокировать мой IP-адрес)

import sys
sys.exit("ВЫКЛЮЧИТЬ ВСЕ!")

этот вообще не работает; элементы продолжают генерироваться и передаваться в конвейер, хотя в журнале появляется сообщение sys.exit() -> exceptions.SystemExit поднято (безрезультатно)

crawler.engine.close_spider(я, 'сообщение журнала')

здесь та же проблема, что и в первом случае, упомянутом выше.

Я пробовал:

scrapy.project.crawler.engine.stop()

Безрезультатно

РЕДАКТИРОВАТЬ: Если я сделаю в конвейере:

from scrapy.contrib.closespider import CloseSpider

, что я должен передать в качестве аргумента «обходчика» в CloseSpider init() из области действия моего конвейера?

12
задан Community 23 May 2017 в 12:17
поделиться