Как я могу сделать обход сканирования и выходить из него, когда сталкивается с первым исключением?
В целях развития я хотел бы прекратить все действия по сканированию в режиме сканирования, как только произойдет первое исключение (в пауке или конвейере).
Любые советы?
Ответы
Ответ 1
Начиная с 0.11 существует CLOSESPIDER_ERRORCOUNT
:
Целое число, определяющее максимальное количество ошибок, получаемых до закрытия паука. Если паук генерирует больше, чем это число ошибок, он будет закрыт по причине closespider_errorcount. Если ноль (или не установлен), пауки не будут закрыты числом ошибок.
Если установлено значение 1
, паук будет закрыт в первом исключении.
Ответ 2
В spider вы можете просто выбросить CloseSpider исключение.
def parse_page(self, response):
if 'Bandwidth exceeded' in response.body:
raise CloseSpider('bandwidth_exceeded')
Для других (middlewares, конвейер и т.д.) вы можете вручную вызвать close_spider, как сказал ахтер.
Ответ 3
его чисто зависит от вашей бизнес-логики. но это сработает для вас.
crawler.engine.close_spider(self, 'log message')
Рекомендуемое чтение
Рекомендуемое чтение
а наихудшее решение -
import sys
sys.exit("SHUT DOWN EVERYTHING!")