Я не хочу сканировать одновременно и блокироваться. Я хотел бы отправить один запрос в секунду.
Как дать задержку между каждым запросом в скрининге?
Ответ 1
Существует setting:
DOWNLOAD_DELAY
По умолчанию:
0
Время (в секундах), которое загрузчик должен ожидать раньше загрузка последовательных страниц с одного и того же веб-сайта. Это можно использовать для дросселирования скорости сканирования, чтобы избежать слишком больших ударов по серверам.
DOWNLOAD_DELAY = 0.25 # 250 ms of delay
Прочтите документы: https://doc.scrapy.org/en/latest/index.html
Ответ 2
Вы также можете установить атрибут download_delay на паук, если вам не нужна глобальная задержка загрузки. См. http://doc.scrapy.org/en/latest/faq.html#what-does-the-response-status-code-999-means
Ответ 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