Подтвердить что ты не робот

Принудительный мой паук для паузы, чтобы остановить сканирование

существует ли возможность прекратить сканирование, если задано условие if (например, scrap_item_id == predefine_value). Моя проблема похожа на Scrapy - как идентифицировать уже очищенные URL-адреса, но я хочу "заставить" мой scrapy-паук прекратить сканирование после обнаружения последнего скребкового элемента.

4b9b3361

Ответ 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