scraping - ¿Cómo se puede retrasar entre cada solicitud en scrapy?
scrapy ruby (6)
No quiero arrastrarme de forma simultánea y bloquearme. Me gustaría enviar una solicitud por segundo.
Además de DOWNLOAD_DELAY, también puede usar la función AUTOTHROTTLE de scrapy, https://doc.scrapy.org/en/latest/topics/autothrottle.html
Cambia la cantidad de retraso entre las solicitudes según el archivo de configuración. Si establece 1 para el retardo tanto inicial como máximo, esperará 1 segundo en cada solicitud.
Su propósito original es variar el tiempo de demora para que la detección de tu robot sea más difícil.
Solo tiene que configurarlo en settings.py de la siguiente manera:
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1
AUTOTHROTTLE_MAX_DELAY = 3
Hay una setting para eso:
DOWNLOAD_DELAY
Predeterminado:
0
La cantidad de tiempo (en segundos) que el programa de descarga debe esperar antes de descargar páginas consecutivas desde el mismo sitio web. Esto se puede usar para acelerar la velocidad de rastreo para evitar golpear demasiado a los servidores.
DOWNLOAD_DELAY = 0.25 # 250 ms of delay
Lea los documentos: https://doc.scrapy.org/en/latest/index.html
Retrasos ¿Podemos establecer en 2 dice: -
Podemos especificar el retraso mientras ejecutamos el rastreador. P.ej. muestra de rastreo de scrapy --set DOWNLOAD_DELAY = 3 (lo que significa 3 segundos de retraso entre dos solicitudes)
O bien, podemos especificar Globaly en settings.py DOWNLOAD_DELAY = 3
por defecto, scrapy demora 0,25 segundos entre 2 solicitudes.
También puede establecer el atributo ''download_delay'' en araña si no desea un retraso de descarga global. Ver http://doc.scrapy.org/en/latest/faq.html#what-does-the-response-status-code-999-means
si desea mantener un retraso de descarga de exactamente un segundo, establecer DOWNLOAD_DELAY=1
es la forma de hacerlo.
Pero scrapy también tiene una función para establecer automáticamente los retrasos de descarga llamados AutoThrottle
. Establece automáticamente los retrasos en función de la carga del servidor de Scrapy y del sitio web que está rastreando. Esto funciona mejor que establecer un retraso arbitrario.
Lea más sobre esto en http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension
He rastreado más de 100 dominios y no he sido bloqueado con AutoThrottle encendido
class S(Spider):
rate = 1
def __init__(self):
self.download_delay = 1/float(self.rate)
la tasa establece que se puede descargar una cantidad máxima de páginas en un segundo.