Как сделать паузу в Scrapy при блокировке - PullRequest
0 голосов
/ 26 ноября 2018

Я делаю проект Scrapy, который выполняется на сервере интрасети, мне нужно установить прокси-сервер для подключения к внешней сети, чтобы я не мог использовать способ прокси (изменить IP-адрес), чтобы не быть заблокированным.

middlewares.py:

class SetProxy(object):
    def process_request(self, request, spider):
        request.meta['proxy'] = os.getenv('HTTP_PROXY')

Мой целевой веб-сайт возвращает ответ о статусе 200, даже когда он блокирует меня, поэтому я могу только определить содержание ответа, чтобы проверить, не заблокирован ли я

mySpider.py:

def parse(self, response):

    block_msg1 = "FOR SECURITY REASONS, THIS PAGE CAN NOT BE ACCESSED!"
    block_msg2 = "Overrun"

    # not be banned
    if str(response.body).find(block_msg1) == -1 and str(response.body).find(block_msg2) == -1:
        ......        
        yield item

    # get banned
    elif str(response.body).find(block_msg1) != -1 or str(response.body).find(block_msg2) != -1:

        # I want to pause Scrapy (stop sending requests but not stop pipelines' work) for a while here but I don't know how

        yield scrapy.Request(url=response.url, headers=sub_headers, callback=self.parse_sub)

Как сделать так, чтобы Scrapy прекратил посылать запросы на некоторое время, но не остановил конвейеры, когда я обнаружил, что они заблокированы в методе parse_sub (), ивосстановить через n минут?

1 Ответ

0 голосов
/ 26 ноября 2018

У вас есть несколько вариантов решения вашей проблемы:

  1. Измените задержку загрузки и / или одновременных запросов в настройках
  2. Используй скрапу Расширение AutoThrottle
...