Как автоматически увеличить DOWNLOAD_DELAY от scrapy при обнаружении кода 500 в статусе ответа - PullRequest
0 голосов
/ 17 января 2019

Я собираюсь написать сотни пауков, чтобы сканировать различные статические веб-страницы, поэтому я выбираю Scrapy, чтобы помочь мне закончить свою работу.

Во время работы я считаю, что большинство веб-сайтов просты и не защищают от пауков. Но мне было трудно установить костюм DOWNLOAD_DELAY в файле scrapy.setting.py. Слишком много пауков, чтобы закодировать и найти подходящий DOWNLOAD_DELAY для каждого паука, у меня не хватит времени.

Я хочу знать, какие модели scrapy загружают и используют параметр DOWNLOAD_DELAY, и как кодировать программу для автоматического увеличения DOWNLOAD_DELAY при обнаружении ошибки подачи (паук слишком часто запрашивает).

1 Ответ

0 голосов
/ 17 января 2019

Вы можете расширить AutoThrottle промежуточное ПО, отвечающее за управление задержками, с помощью собственной политики:

# extensions.py

from scrapy.extensions.throttle import AutoThrottle

class ZombieThrottle(AutoThrottle):
    """start throttling when web page dies"""

    def _adjust_delay(self, slot, latency, response):
        """Define delay adjustment policy"""
        if response.status == 500:
            slot.delay = 60  # 1 minute

И включите его вместо значения по умолчанию в вашем settings.py:

# settings.py
EXTENSIONS = {
    'scrapy.extensions.throttle.AutoThrottle': None,
    'myspider.extensions.ZombieThrottle': 0,
}
...