Как дать задержку между каждым запросом в скрапе? - PullRequest
42 голосов
/ 07 января 2012

Я не хочу одновременно сканировать и блокироваться. Я хотел бы отправлять один запрос в секунду.

Ответы [ 6 ]

58 голосов
/ 08 января 2012

Для этого есть настройка :

DOWNLOAD_DELAY

По умолчанию: 0

Количество времени (в секундах) загрузчик должен подождать, прежде чем загружать последовательные страницы с одного и того же веб-сайта.Это можно использовать для снижения скорости сканирования, чтобы избежать слишком сильного удара по серверам.

DOWNLOAD_DELAY = 0.25    # 250 ms of delay

Прочитайте документы: https://doc.scrapy.org/en/latest/index.html

18 голосов
/ 03 июня 2013

Вы также можете установить атрибут «download_delay» на паука, если вы не хотите глобальной задержки загрузки. Смотри http://doc.scrapy.org/en/latest/faq.html#what-does-the-response-status-code-999-means

8 голосов
/ 20 августа 2014
class S(Spider):
    rate = 1

    def __init__(self):
        self.download_delay = 1/float(self.rate)

скорость устанавливает максимальное количество страниц, которые можно загрузить за одну секунду.

5 голосов
/ 19 января 2017

Кроме DOWNLOAD_DELAY, вы также можете использовать функцию AUTOTHROTTLE для скрапа, https://doc.scrapy.org/en/latest/topics/autothrottle.html

Изменяет величину задержки между запросами в зависимости от файла настроек. Если вы установите 1 как для пуска, так и для максимальной задержки, он будет ждать 1 секунду в каждом запросе.

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

Вам просто нужно установить его в settings.py следующим образом:

AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1
AUTOTHROTTLE_MAX_DELAY = 3
5 голосов
/ 14 октября 2015

Если вы хотите, чтобы задержка загрузки составляла ровно одну секунду, для этого нужно установить значение DOWNLOAD_DELAY=1.

Но scrapy также имеет функцию автоматической установки задержек загрузки, которая называется AutoThrottle. Он автоматически устанавливает задержки в зависимости от нагрузки как сервера Scrapy, так и веб-сайта, который вы сканируете. Это работает лучше, чем установка произвольной задержки.

Подробнее об этом читайте на http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension
Я просканировал более 100 доменов и не был заблокирован с включенным AutoThrottle

5 голосов
/ 14 октября 2015

Задержки Можем ли мы установить в 2 говорит: -

Мы можем указать задержку во время работы сканера. Например. Пример сканирования сканирования --set DOWNLOAD_DELAY = 3 (что означает задержку в 3 секунды между двумя запросами)

Или же мы можем указать Globaly в settings.py DOWNLOAD_DELAY = 3

по умолчанию очистка занимает 0,25 секунды между двумя запросами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...