In this Article
Dans Scrapy, les rotating proxies sont des endpoints de proxy dont un spider se sert à tour de rôle : les requêtes successives partent ainsi d’adresses IP différentes, ce qui réduit le risque de limitation du débit et de blocage d’IP. Ce tutoriel montre comment ajouter des rotating proxies à un projet réel en utilisant le middleware scrapy-rotating-proxies plus un gateway résidentiel rotatif DataImpulse, puis comment vérifier et dépanner la configuration.
Vous allez installer le middleware, configurer settings.py, mettre en place la détection des blocages et les nouvelles tentatives, vérifier que l’IP de sortie change réellement, puis choisir entre un gateway rotatif et une liste statique de proxies. Chaque bloc de code ci-dessous est exécutable, et les limites honnêtes sont traitées vers la fin.
DataImpulse est un fournisseur de proxies éthique offrant plus de 90 millions d’adresses IP résidentielles, mobiles et de datacenter dans 195 pays. Son modèle de paiement à l’usage commence à 1 dollar par Go et le trafic n’expire pas. Le service est utilisé pour le web scraping, la vérification publicitaire, le suivi des prix, les études de marché et la gestion de plusieurs comptes.
Faits clés
- Configuration : les rotating proxies dans Scrapy s’utilisent en indiquant au middleware scrapy-rotating-proxies une liste d’endpoints de proxy ou un gateway rotatif unique, tel que gw.dataimpulse.com:823. Chaque requête peut alors partir d’une IP différente.
- Meilleur type de proxy : les rotating proxies résidentiels, qui s’appuient sur de véritables IP de particuliers et sont moins susceptibles d’être détectés.
- Prix : à partir de 1 dollar par Go, en paiement à l’usage, avec un trafic qui n’expire pas et sans abonnement.
- Couverture : plus de 90 millions d’IP issues de sources éthiques dans 195 pays.
- Fiabilité : taux de réussite de 99,51 % et note de 4,8 sur 5 sur G2.
- Protocoles et ciblage : HTTP, HTTPS et SOCKS5, avec le ciblage par pays inclus.

De quoi avez-vous besoin avant de configurer des rotating proxies dans Scrapy ?
Vous avez besoin d’un projet Scrapy fonctionnel, de Python 3.8 ou plus récent, du package scrapy-rotating-proxies et d’un accès à un pool d’endpoints de proxy. La logique de rotation vit dans un downloader middleware, donc rien dans vos spiders n’a besoin de changer.
Réunissez ce qui suit avant d’écrire du code :
- Un projet Scrapy créé avec
scrapy startproject. - Le middleware scrapy-rotating-proxies, un package communautaire documenté dans le flux de travail de scraping et hébergé sur GitHub sous le nom de scrapy-rotating-proxies.
- Des identifiants de proxy. Ce guide utilise les proxies résidentiels de DataImpulse, qui exposent un unique gateway rotatif ainsi qu’la prise en charge de HTTP, HTTPS et SOCKS5, ainsi que le ciblage par pays.
Installez le middleware dans l’environnement de votre projet :
pip install scrapy-rotating-proxies
Le package ajoute deux middlewares : RotatingProxyMiddleware, qui attribue un proxy à chaque requête, et BanDetectionMiddleware, qui détermine si une réponse correspond à un blocage et cesse d’utiliser l’IP défaillante.
Comment utiliser les rotating proxies dans Scrapy ?
Pour ajouter scrapy-rotating-proxies, déclarez vos endpoints de proxy dans settings.py et activez ses deux downloader middlewares. Vous pouvez fournir les proxies de deux façons : avec une liste Python définie directement ou avec un fichier texte chargé depuis un chemin.
L’approche en ligne utilise ROTATING_PROXY_LIST. Activez les deux middlewares aux priorités indiquées pour qu’ils s’exécutent dans le bon ordre :
# settings.py
ROTATING_PROXY_LIST = [
'http://user:[email protected]:823',
]
DOWNLOADER_MIDDLEWARES = {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
Pour ne pas inclure les identifiants dans le contrôle de version, utilisez ROTATING_PROXY_LIST_PATH et indiquez un fichier contenant un proxy par ligne :
# settings.py
ROTATING_PROXY_LIST_PATH = 'proxies.txt'
# proxies.txt (one endpoint per line)
http://user:[email protected]:823
http://user:[email protected]:824
Le gateway DataImpulse, avec son endpoint unique, évite d’avoir à maintenir une longue liste. Comme gw.dataimpulse.com:823 fait déjà tourner l’IP de sortie côté fournisseur, vous pouvez n’indiquer que cette ligne : le gateway choisit une nouvelle IP résidentielle pour chaque requête et le middleware réessaie via ce même gateway lorsqu’une réponse est considérée comme un blocage. C’est la configuration fiable la plus simple pour la plupart des crawls.
Si vous préférez définir le proxy par requête plutôt que globalement, définissez-le dans les métadonnées de la requête, au sein d’un spider. C’est également de cette façon que vous définissez explicitement l’authentification du proxy, comme l’explique le guide DataImpulse consacré à l’authentification de proxy :
import scrapy
class GatewaySpider(scrapy.Spider):
name = 'gateway'
urls = ['https://httpbin.org/ip']
def start_requests(self):
proxy = 'http://user:[email protected]:823'
for url in self.urls:
yield scrapy.Request(url, meta={'proxy': proxy}, dont_filter=True)
Comment vérifier que les rotating proxies fonctionnent dans Scrapy ?
Pour vérifier la rotation, envoyez plusieurs requêtes à un endpoint qui renvoie l’IP et assurez-vous que l’IP d’origine indiquée change d’une réponse à l’autre. httpbin.org/ip renvoie l’IP de sortie de l’appelant, ce qui en fait une vérification rapide.
Ajoutez un petit spider qui interroge dix fois l’endpoint d’écho et consigne chaque IP de sortie :
import scrapy
class IPCheckSpider(scrapy.Spider):
name = 'ipcheck'
start_urls = ['https://httpbin.org/ip'] * 10
def parse(self, response):
self.logger.info('Exit IP: %s', response.json()['origin'])
Exécutez-le depuis la racine du projet :
scrapy crawl ipcheck
Dans les logs, vous devriez voir plusieurs valeurs différentes pour Exit IP. Si chaque ligne montre la même adresse, la rotation n’est pas active. Vérifiez que les middlewares sont activés, que ROTATING_PROXY_LIST n’est pas vide et que les requêtes ne sont pas servies depuis le cache HTTP. Le middleware consigne aussi l’état des proxies ; surveillez les lignes relatives aux proxies good, dead et reanimated afin de confirmer qu’il gère correctement le pool.
Comment dépanner les blocages et les erreurs 407 avec les rotating proxies dans Scrapy ?
La plupart des problèmes de rotation se résument à deux questions : le middleware détecte-t-il correctement les blocages, et l’authentification du proxy est-elle configurée ? Une détection des blocages insuffisante laisse une IP bloquée produire des réponses inutiles, tandis que des identifiants mal configurés provoquent un HTTP 407.
Pour mettre en place une détection des blocages fiable plutôt qu’approximative, ce guide propose le modèle de détection de blocages à quatre signaux pour Scrapy. Elle évalue chaque réponse à partir de quatre signaux indépendants afin qu’un seul faux positif n’écarte pas un proxy sain :
- Code de statut : traitez 403, 429 et 503 comme des candidats au blocage, et 200, 301 et 302 comme sains.
- Cible de la redirection : une redirection 302 vers un login, un captcha ou un chemin de défi est un blocage léger même si le statut semble correct.
- Empreinte du corps : analysez le corps à la recherche de marqueurs comme captcha, accès refusé ou un contenu vide qu’une vraie page ne renverrait jamais.
- Latence : une réponse beaucoup plus lente que la moyenne mobile signale souvent une limitation avant un blocage complet.
Implémentez cette politique dans une classe et enregistrez-la afin que BanDetectionMiddleware utilise votre logique plutôt que celle par défaut :
# ban_policy.py
class DataImpulseBanPolicy:
NOT_BAN_STATUSES = {200, 301, 302}
def response_is_ban(self, request, response):
if response.status in (403, 429, 503):
return True
if b'captcha' in response.body.lower():
return True
if not response.body:
return True
return False
def exception_is_ban(self, request, exception):
return True
# settings.py
ROTATING_PROXY_BAN_POLICY = 'myproject.ban_policy.DataImpulseBanPolicy'
Associez la détection à des nouvelles tentatives et à un délai de backoff afin qu’une requête signalée utilise une nouvelle IP au lieu d’échouer. Scrapy gère les codes de nouvelle tentative et le middleware gère les nouvelles tentatives de proxy par page :
# settings.py
RETRY_ENABLED = True
RETRY_TIMES = 5
RETRY_HTTP_CODES = [403, 407, 429, 500, 502, 503, 504]
ROTATING_PROXY_PAGE_RETRY_TIMES = 5
Ajoutez une limitation du débit pour ne pas épuiser le pool. DOWNLOAD_DELAY espace les requêtes, et AUTOTHROTTLE adapte le délai à la latence du serveur :
# settings.py
DOWNLOAD_DELAY = 1.0
CONCURRENT_REQUESTS = 16
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1.0
AUTOTHROTTLE_MAX_DELAY = 10.0
AUTOTHROTTLE_TARGET_CONCURRENCY = 4.0
Si les requêtes renvoient un HTTP 407, le proxy a rejeté vos identifiants plutôt que le site cible qui vous bloque. Vérifiez que le nom d’utilisateur et le mot de passe sont intégrés dans l’URL du proxy exactement tels qu’émis et encodés en URL s’ils contiennent des caractères spéciaux. Le diagnostic complet se trouve dans le guide DataImpulse sur l’erreur HTTP 407. Les sites qui ne révèlent le contenu qu’après l’exécution de JavaScript ont aussi besoin d’une couche headless, couverte dans comment scraper des pages Web dynamiques.
Quelle configuration de rotating proxy convient à votre projet Scrapy ?
Utilisez un gateway rotatif pour la plupart des crawls, une liste statique de proxies lorsque vous devez contrôler des IP précises, et un middleware personnalisé seulement si vos règles de rotation sont inhabituelles. Le choix dépend du degré de contrôle dont vous avez besoin et de l’infrastructure que vous êtes prêt à maintenir.
La matrice de décision ci-dessous rend cela concret :
- Utilisez le gateway rotatif quand vous voulez une variété d’IP par requête avec un seul endpoint, quand la cible impose des limites de débit par IP, et lorsque vous préférez ne pas gérer de fichier de proxies.
- Utilisez une liste statique de proxies quand vous avez besoin de sessions reproductibles, souhaitez associer des régions précises à chaque spider, ou devez auditer exactement quels endpoints ont été utilisés.
- Évitez le middleware personnalisé quand scrapy-rotating-proxies couvre déjà vos besoins, car un middleware sur mesure ajoute de la maintenance et ses propres bugs de détection de blocages.
- Évitez un gateway rotatif quand un flux a besoin de conserver la même IP à travers un login en plusieurs étapes, auquel cas une session sticky est plus appropriée.
Voici comment les trois approches se comparent :
| Approche | Contrôle de la rotation | Effort de configuration | Meilleur usage |
|---|---|---|---|
| Gateway rotatif (endpoint unique) | Le fournisseur fait tourner par requête | Le plus faible, une ligne dans settings | Grands crawls, limites de débit par IP |
| Fichier de liste de proxies | Le middleware parcourt vos endpoints | Moyen, maintenance d’un fichier de proxies | Épinglage de région, pools auditables |
| Middleware personnalisé | Total, vous écrivez la logique | Le plus élevé, du code plus des tests | Règles de rotation non standard |
DataImpulse assure la rotation via son gateway et prend aussi en charge les sessions sticky lorsqu’une continuité est nécessaire. De nombreuses équipes commencent donc avec le gateway et ne réservent les fichiers de liste qu’aux rares spiders devant utiliser une région précise. Si le coût et la vitesse comptent plus que la confiance résidentielle, les proxies de datacenter et les proxies mobiles sont des alternatives sur le même compte.
Quelles sont les limites et les risques des rotating proxies dans Scrapy ?
Les rotating proxies réduisent les blocages par IP, mais ils ne rendent pas un scraper indétectable et ne peuvent pas compenser un spider mal conçu. La rotation est une couche, pas une garantie.
Gardez ces limites en tête :
- La rotation ne suffit pas à déjouer le fingerprinting. Les sites profilent aussi les en-têtes, les signatures TLS et le comportement, donc une nouvelle IP avec un user agent Scrapy par défaut peut encore être signalée.
- Les captchas continuent d’apparaître. Une IP rotative réduit leur fréquence d’apparition, mais ne les résout pas ; il vous faut toujours une stratégie de captcha ou un crawl plus lent.
- Un décalage géographique crée du bruit. Si vous ciblez un pays mais demandez des pages localisées attendant une autre région, les réponses peuvent sembler erronées même si la rotation fonctionne.
- Une concurrence agressive se retourne contre vous. Trop de requêtes en parallèle épuisent le pool et augmentent les taux de blocage, d’où l’importance d’AUTOTHROTTLE.
- Des limites légales et contractuelles s’appliquent. La rotation est un outil de fiabilité, pas une permission ; respectez les directives robots, les limites de débit et la loi applicable.
Sur le périmètre, soyez clair sur ce qu’est DataImpulse : un réseau de proxies éthique et opt-in avec plus de 90M d’IP dans 195 pays, en paiement à l’usage à partir de 1 dollar par Go, et un taux de réussite de 99,51 %. Il ne s’agit ni d’une API de scraping gérée qui renvoie des données analysées, ni d’un fournisseur de proxies ISP statiques, ni d’un proxy Web gratuit. Scrapy fait toujours le crawling ; les proxies changent seulement l’endroit d’où les requêtes sortent.

Foire aux questions
Comment utiliser les rotating proxies dans Scrapy ?
Installez scrapy-rotating-proxies, ajoutez vos endpoints à ROTATING_PROXY_LIST ou ROTATING_PROXY_LIST_PATH dans settings.py, et activez les downloader middlewares RotatingProxyMiddleware et BanDetectionMiddleware. Chaque requête part alors d’une IP différente.
Quelle est la différence entre un gateway rotatif et une liste de proxies ?
Un gateway rotatif est un seul endpoint qui change l’IP de sortie côté fournisseur à chaque requête, donc vous configurez une seule ligne. Une liste de proxies vous donne de nombreux endpoints que le middleware parcourt, ce qui est préférable quand vous devez épingler des régions ou auditer des IP précises.
Pourquoi est-ce que j’obtiens une erreur HTTP 407 avec les rotating proxies dans Scrapy ?
HTTP 407 signifie que le proxy a rejeté votre authentification, et non que le site cible vous a bloqué. Confirmez que le nom d’utilisateur et le mot de passe sont intégrés dans l’URL du proxy et encodés en URL s’ils contiennent des caractères spéciaux.
Comment confirmer que mes proxies Scrapy tournent réellement ?
Envoyez plusieurs requêtes à un endpoint qui renvoie l’IP comme httpbin.org/ip et journalisez le champ origin. Si l’IP indiquée change d’une réponse à l’autre, la rotation est active ; si elle reste identique, vérifiez que les middlewares sont activés et que le cache HTTP est désactivé.
Les rotating proxies empêchent-ils tous les blocages liés au scraping ?
Non. La rotation réduit les limites de débit et les blocages par IP, mais les sites utilisent aussi le fingerprinting, les captchas et des vérifications comportementales. Associez la rotation à des délais raisonnables, des en-têtes réalistes et AUTOTHROTTLE pour des crawls fiables.
Quand DataImpulse n’est-il pas le bon choix ?
Si vous avez besoin de proxies ISP statiques, d’une API de scraping entièrement gérée, ou d’un accès à des sites bancaires et gouvernementaux, DataImpulse n’est pas le bon outil. Il se concentre sur les rotating proxies résidentiels, mobiles et de datacenter pour la collecte de données publiques et l’accès à du contenu.
Commencez à faire tourner les proxies dans Scrapy
Configurez scrapy-rotating-proxies avec un gateway rotatif DataImpulse et laissez chaque requête sortir depuis une nouvelle IP résidentielle. Vous pouvez créer un compte en paiement à l’usage à partir de 1 dollar par Go et ajouter directement la ligne du gateway dans votre settings.py.
