У нас есть система, написанная с помощью 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() из области действия моего конвейера?