2014-05-27 3 views
5

Я написал скребок, используя scrapy в python. Он содержит 100 start_urls.Terminate Scrapy, если условие выполнено

Я хочу завершить процесс скребков после выполнения условия. т. Е. Прекращается очистка определенного div. По окончании я имею в виду, что он должен прекратить соскабливать все URL-адреса.

Можно

+0

Возможный дубликат: http://stackoverflow.com/questions/4448724/force-my-scrapy-spider-to-stop-crawling –

+0

Возможно, вы посмотрите на ['CloseSpider' Exception] (http: // doc.scrapy.org/en/latest/topics/exceptions.html#closespider), но запросы, которые все еще выполняются (HTTP-запрос отправлен, ответ еще не получен) все равно будет проанализирован. Однако новый запрос не будет обработан. –

+0

@paultrmbrth получает следующую ошибку при использовании этого: raise CloseSpider ('bandwidth_exceeded') exceptions.NameError: глобальное имя «CloseSpider» не определено – user2129794

ответ

8

Что вы ищете является CloseSpider exception.

Добавьте следующую строку где-то в верхней части исходного файла:

from scrapy.exceptions import CloseSpider 

И когда вы обнаружите, что ваше условие завершения удовлетворяется, просто сделать что-то вроде

 raise CloseSpider('termination condition met') 

в методе обратного вызова (вместо возврата или получения Item или Request).

Обратите внимание, что запросы, которые все еще продолжаются (HTTP-запрос отправлен, ответ еще не получен) все равно будет проанализирован. Однако новый запрос не будет обработан.

Смежные вопросы