web-dev-qa-db-fra.com

Comment donner du délai entre chaque demandes en scrapy?

Je ne veux pas ramper simultanément et être bloqué. Je souhaite envoyer une demande par seconde.

42
nizam.sp

Il y a un paramètre pour cela:

DOWNLOAD_DELAY

Défaut: 0

Durée (en secondes) pendant laquelle le téléchargeur doit attendre avant de télécharger des pages consécutives du même site Web. Cela peut être utilisé pour limiter la vitesse d'exploration pour éviter de frapper trop fort les serveurs.

DOWNLOAD_DELAY = 0.25    # 250 ms of delay

Lisez les documents: https://doc.scrapy.org/en/latest/index.html

58
warvariuc

Vous pouvez également définir l'attribut 'download_delay' sur l'araignée si vous ne voulez pas de délai de téléchargement global. Voir http://doc.scrapy.org/en/latest/faq.html#what-does-the-response-status-code-999-means

18
Mikhail Korobov
class S(Spider):
    rate = 1

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

taux définit un nombre maximum de pages pouvant être téléchargées en une seconde.

8
Yan.Zero

si vous souhaitez conserver un délai de téléchargement d'une seconde exactement, définissez DOWNLOAD_DELAY=1 est le moyen de le faire.

Mais scrapy a également une fonction pour définir automatiquement les délais de téléchargement appelée AutoThrottle. Il définit automatiquement les retards en fonction de la charge du serveur Scrapy et du site Web que vous explorez. Cela fonctionne mieux que de définir un délai arbitraire.

Lisez plus à ce sujet sur http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension
J'ai exploré plus de 100 domaines et je n'ai pas été bloqué avec la limitation automatique activée

5
Jeff P Chacko

En plus de DOWNLOAD_DELAY, vous pouvez également utiliser la fonction AUTOTHROTTLE de scrapy, https://doc.scrapy.org/en/latest/topics/autothrottle.html

Il modifie le délai entre les demandes en fonction du fichier de paramètres. Si vous définissez 1 pour le démarrage et le délai maximum, il attendra 1 seconde à chaque demande.

Son but initial est de faire varier le temps de retard afin que la détection de votre bot soit plus difficile.

Il vous suffit de le définir dans settings.py comme suit:

AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1
AUTOTHROTTLE_MAX_DELAY = 3
5
Mehmet Kurtipek

Retards Peut-on définir en 2 dit: -

Nous pouvons spécifier le délai lors de l'exécution du robot. Par exemple. exemple d'analyse crawl --set DOWNLOAD_DELAY = 3 (ce qui signifie un délai de 3 secondes entre deux requêtes)

Ou bien nous pouvons spécifier Globaly dans les paramètres.py DOWNLOAD_DELAY = 3

par défaut, scrapy prend un délai de 0,25 seconde entre 2 requêtes.

5
Niranjan Sagar