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

Как дать задержку между каждым запросом в скрининге?

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

4b9b3361

Ответ 1

Существует setting:

DOWNLOAD_DELAY

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

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

DOWNLOAD_DELAY = 0.25    # 250 ms of delay

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

Ответ 3

class S(Spider):
    rate = 1

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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

Ответ 6

Помимо 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