существует ли возможность прекратить сканирование, если задано условие if (например, scrap_item_id == predefine_value). Моя проблема похожа на Scrapy - как идентифицировать уже очищенные URL-адреса, но я хочу "заставить" мой scrapy-паук прекратить сканирование после обнаружения последнего скребкового элемента.
Принудительный мой паук для паузы, чтобы остановить сканирование
Ответ 1
В последней версии Scrapy, доступной в GitHub, вы можете создать исключение CloseSpider для ручного закрытия паука.
В 0,14 примечание к выпуску doc: "Добавлено исключение CloseSpider для ручного закрытия пауков (r2691)"
Пример в соответствии с документами:
def parse_page(self, response):
if 'Bandwidth exceeded' in response.body:
raise CloseSpider('bandwidth_exceeded')
Смотрите также: http://readthedocs.org/docs/scrapy/en/latest/topics/exceptions.html?highlight=closeSpider
Ответ 2
Этот вопрос задавали 8 месяцев назад, но мне было интересно то же самое и нашли другое (не большое) решение. Надеюсь, это поможет будущим читателям.
Я подключаюсь к базе данных в файле Pipeline, если соединение с базой данных не увенчалось успехом, я хотел, чтобы Spider прекратил сканирование (нет смысла собирать данные, если их некуда отправить). В результате я использовал:
from scrapy.project import crawler
crawler._signal_shutdown(9,0) #Run this if the cnxn fails.
Это приводит к тому, что Паук выполняет следующие действия:
[scrapy] INFO: Received SIGKILL, shutting down gracefully. Send again to force unclean shutdown.
Я просто отложил это вместе после прочтения вашего комментария и просмотрел "/usr/local/lib/python2.7/dist-packages/Scrapy-0.12.0.2543-py2.7.egg/scrapy/crawler. py". Я не совсем уверен, что он делает, первым номером, переданным функции, является signame (например, используя 3,0 вместо 9,0 возвращает ошибку [scrapy] INFO: Received SIGKILL...
Кажется, что он работает достаточно хорошо. Счастливые скребки.
EDIT: Я также предполагаю, что вы могли бы просто заставить вашу программу закрывать что-то вроде:
import sys
sys.exit("SHUT DOWN EVERYTHING!")
EDIT2: Похоже, кто-то создал расширение, чтобы остановить паука. Это может быть полезно кому-то: http://dev.scrapy.org/browser/scrapy/contrib/closespider.py