Geonode logo
Carl Gamutan

Carl Gamutan

Mis à jour : 7 octobre 2026

Publié : 2 octobre 2026

Comment utiliser des proxys avec Scrapy

Scrapy est un framework Python permettant d'explorer des sites web et d'extraire des données à grande échelle. Voici comment y connecter un proxy, configurer la rotation des proxys ou une session persistante, et résoudre les erreurs qui peuvent survenir.

Pourquoi Scrapy a besoin d'un proxy

Les proxys pour Scrapy permettent à l'outil de se connecter via une adresse IP différente, au lieu d'utiliser systématiquement celle de la machine sur laquelle il est exécuté. Cela s'avère utile pour les tâches liées à la localisation, les tests, la surveillance et d'autres opérations où la source de la connexion a son importance.

Scrapy continue de gérer la tâche principale. Le proxy gère quant à lui la provenance de la connexion.

Que se passe-t-il sans proxy : blocages d'adresses IP, limitations de débit, restrictions géographiques

Sans proxy, les sites web continuent de voir la même adresse IP. À mesure que l'activité augmente, cette adresse IP risque d'atteindre une limite de débit ou d'être bloquée.

La localisation peut également avoir son importance. Une page consultée depuis l'Allemagne peut ne pas afficher le même contenu que celle consultée depuis les États-Unis.

Un proxy pour Scrapy permet de se connecter à partir de différentes adresses IP et de différents emplacements lorsque cela est nécessaire.

Quel type de proxy utiliser avec Scrapy

Le choix du type de proxy dépend de la tâche à effectuer.

Type de proxyRécupération de donnéesGestion des comptesTestsSurveillance
RésidentielIdéal lorsque la localisation et l'adresse IP d'origine sont importantesUtile lorsque les comptes nécessitent des adresses IP résidentiellesIdéal pour les tests basés sur la localisationUtile pour vérifier le contenu depuis différents endroits
FAIIdéal lorsqu'une adresse IP stable est nécessaireUtile pour des sessions prolongées sur une même adresse IPIdéal pour les tests avec une adresse IP constanteUtile pour des vérifications continues depuis la même adresse IP
Centre de donnéesIdéal pour la vitesse et les volumes de requêtes importantsPréférable lorsque les adresses IP résidentielles ne sont pas requisesIdéal pour les tests générauxIdéal pour les vérifications automatisées fréquentes

Les proxys résidentiels sont utiles lorsque l’adresse IP source et la localisation ont de l’importance. Les proxys FAI fonctionnent bien lorsqu’une même adresse IP doit rester active plus longtemps. Les proxys de centre de données sont indiqués lorsque la priorité est donnée à la vitesse et à l’échelle.

Le choix de la meilleure option dépend également de la nécessité d’un ciblage géographique, d’une connexion stable ou d’un accès à un pool d’adresses IP plus étendu.

Comment configurer un proxy dans Scrapy

La configuration du proxy Scrapy nécessite l'Geonode, le port, le nom d'utilisateur et le mot de passe. Enregistrez ces informations d'identification dans des variables d'environnement, puis chargez-les lors de la configuration du proxy dans le code.

Vous utilisez Geonode ? Retrouvez le nom d'utilisateur et le mot de passe dans la section Identifiants d'accès et l'hôte, le port et le protocole dans la section Informations sur le serveur proxy.

Chemin d'accès aux paramètres ou code

Pour notre test, nous avons ajouté un middleware de téléchargement :

DOWNLOADER_MIDDLEWARES = {
    "geonode_scrapy.middlewares.GeonodeProxyMiddleware": 350,
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 400,
}

Le middleware transmet l’URL du proxy via request.meta["proxy"]

, que la méthode HttpProxyMiddleware

de Scrapy utilise ensuite :

request.meta["proxy"] = proxy_url

Vous pouvez également transmettre le proxy directement à une requête individuelle :

yield scrapy.Request(
    url,
    meta={"proxy": proxy_url},
)

Conservez le nom d’utilisateur et le mot de passe réels dans des variables d’environnement plutôt que de les inscrire directement dans le fichier Python. Lors de notre test, cette configuration a renvoyé avec succès un code HTTP 200 via le proxy.

Le format d’authentification hôte:port:utilisateur:mot-de-passe

Geonode

vous fournit quatre valeurs :

proxy.geonode.io:PORT:USERNAME:PASSWORD

Scrapy a besoin des mêmes informations que pour une URL de proxy :

http://USERNAME:PASSWORD@proxy.geonode.io:PORT

Enregistrez les identifiants ou la valeur complète du proxy dans une variable d’environnement :

GEONODE_PROXY_URL=http://USERNAME:PASSWORD@proxy.geonode.io:PORT

Puis chargez-la dans Python :

import os

proxy_url = os.environ["GEONODE_PROXY_URL"]

Pour notre test HTTP, le format obtenu était :

http://USERNAME:PASSWORD@proxy.geonode.io:9000

Pour vérifier l’authentification, nous avons également lancé la requête avec des identifiants incorrects. Scrapy a reçu un code d'état HTTP 407 avec la réponse suivante :

Authentication error. Please check your authentication settings.

Scrapy a affiché la réponse via HttpErrorMiddleware

sous la forme HttpError('Ignoring non-200 response')

.

Rotation ou session persistante dans Scrapy

Si les requêtes n’ont pas besoin de conserver la même adresse IP, utilisez la rotation.

Pour notre test, nous avons transmis à Scrapy le proxy à rotation Geonode

:

proxy_url = "http://USERNAME:PASSWORD@proxy.geonode.io:9000"

yield scrapy.Request(
    url,
    meta={"proxy": proxy_url},
)

Nous avons effectué cinq requêtes consécutives :

Request 1: 101.98.231.191
Request 2: 101.98.231.191
Request 3: 101.98.231.191
Request 4: 122.164.83.189
Request 5: 122.164.83.189

Unique IPs: 2
Rotation: Yes

Le test confirme que la rotation a bien eu lieu, mais que l’adresse IP n’a pas changé à chaque requête.

Si des requêtes liées doivent rester sur la même adresse IP, utilisez plutôt une session « sticky » :

proxy_url = (
    "http://USERNAME-session-blogtest01-lifetime-10:"
    "PASSWORD@proxy.geonode.io:10000"
)

Nous avons effectué trois requêtes en utilisant la même session :

Request 1: 177.73.202.78
Request 2: 177.73.202.78
Request 3: 177.73.202.78

Same IP: Yes

Dans notre test, les trois requêtes ont utilisé la même adresse IP.

Consultez les guides d’Geonode

s sur les proxys rotatifs et les sessions « sticky » pour connaître les paramètres disponibles.

Erreurs courantes liées au proxy dans Scrapy et comment les résoudre

Si le proxy ne fonctionne pas, commencez par vérifier les informations de connexion. Vérifiez le nom d'utilisateur et le mot de passe, puis l'hôte, le port et le protocole. L'erreur renvoyée par Scrapy permet généralement de cerner le problème.

407 Authentification proxy requise

Un code 407 indique généralement un problème d'authentification.

Lorsque nous avons testé Scrapy avec des identifiants incorrects, le proxy a renvoyé le message suivant : «

HTTP status: 407
Authentication error. Please check your authentication settings.

». Vérifiez d'abord le nom d'utilisateur et le mot de passe. S'ils sont corrects, assurez-vous que Scrapy reçoit l'URL complète du proxy, comprenant le schéma, les identifiants, l'hôte et le port.

ERR_TUNNEL_CONNECTION_FAILED / connexion refusée

Une erreur de connexion signifie généralement que Scrapy n'a pas pu accéder au proxy.

Vérifiez d'abord l'hôte et le port. Assurez-vous ensuite que le protocole correspond bien à celui du serveur proxy utilisé.

Scrapy ne renvoie pas nécessairement une réponse de type navigateur (ERR_TUNNEL_CONNECTION_FAILED). Lors de notre test de connexion échouée, Scrapy a réessayé la requête et a finalement renvoyé DownloadFailedError contenant une erreur Twisted ConnectionLost.

Délais d'expiration et réponses vides

Un délai d'expiration signifie que la requête n'a pas reçu de réponse dans le délai configuré.

Commencez par vérifier si l'URL cible fonctionne et si le proxy parvient à s'y connecter. Si les deux fonctionnent, vérifiez la configuration du délai d'expiration dans Scrapy.

Pour notre test d’échec de connexion, nous avons utilisé un port de proxy invalide avec DOWNLOAD_TIMEOUT=5

. Après les tentatives de reconnexion, Scrapy a renvoyé :

DownloadFailedError(
  ConnectionLost:
  Connection to the other side was lost in a non-clean fashion.
)

Ainsi, une connexion proxy échouée peut apparaître comme une erreur de connexion plutôt que comme un simple message de délai d’attente.

Une erreur spécifique à Scrapy

Une erreur courante propre à Scrapy consiste à transmettre une valeur incomplète à request.meta["proxy"]

.

Dans notre test, nous avons utilisé :

proxy.geonode.io:9000

sans le schéma ni les identifiants. La requête a renvoyé un code HTTP 407.

Pour résoudre ce problème, il a suffi de transmettre l’URL complète du proxy :

http://USERNAME:PASSWORD@proxy.geonode.io:9000

ou de laisser le middleware du téléchargeur la générer à partir des variables d’environnement.

Scrapy + Geonode : ce que cela vous apporte

Scrapy gère les requêtes ou les connexions au sein de l’application. Geonode gère la connexion au proxy.

Vous pouvez choisir des proxys résidentiels, FAI ou de centre de données en fonction de la tâche, puis utiliser la rotation, les sessions persistantes et le ciblage géographique si nécessaire. Cela permet de séparer la configuration des proxys du reste du code de l'application.

Les formules varient selon le type de proxy, certaines options étant facturées au Go.

Foire aux questions

Scrapy prend-il en charge les proxys de type « SOCKS5 » ?

La configuration « SOCKS5 » nécessite une configuration supplémentaire dans la version de Scrapy que nous avons testée.

La tentative d'utilisation d'un proxy de type « socks5:// » via le gestionnaire HTTP par défaut de Scrapy a échoué avec l'erreur suivante : «

UnsupportedURLSchemeError("Unsupported scheme: b'socks5'")
``` »

Nous avons ensuite installé `httpx2[socks]` et configuré le gestionnaire expérimental de Scrapy : `HttpxDownloadHandler`. Avec le proxy rotatif SOCKS5 sur le port 11000, la requête a abouti avec un code HTTP 200 et a renvoyé une adresse IP de proxy. Ce gestionnaire étant expérimental, il est davantage adapté aux tests qu’à une utilisation en production.

Puis-je faire tourner les adresses IP à chaque requête dans Scrapy ?

Oui, Scrapy peut envoyer des requêtes via un proxy à rotation, mais il n'est pas garanti qu'une adresse IP différente soit utilisée pour chaque requête.

Notre test portant sur cinq requêtes a donné deux adresses IP distinctes. Les trois premières requêtes ont partagé une même adresse IP, tandis que les deux dernières en ont partagé une autre, ce qui confirme que la rotation a bien eu lieu pendant le test.

Existe-t-il une période d'essai gratuite ?

Oui. Geonode propose une période d'essai gratuite, ce qui permet de tester le proxy avec Scrapy avant de passer à une formule payante. Consultez les conditions actuelles de la période d'essai gratuite et les différentes formules.

Où dois-je configurer le proxy dans Scrapy ?

Pour une requête individuelle, transmettez le proxy via request.meta["proxy"].

Si la même configuration de proxy est requise pour plusieurs requêtes, le middleware « downloader » centralise la logique de proxy en un seul endroit. Dans notre test, le middleware personnalisé a défini request.meta["proxy"] avant que le middleware intégré de Scrapy, HttpProxyMiddleware, ne traite la requête.

Pourquoi mon spider Scrapy s'exécute-t-il sans envoyer aucune requête ?

Vérifiez comment le spider génère ses premières requêtes.

Lors de notre test avec Scrapy 2.19, le fait de ne définir que la méthode héritée start_requests()

a entraîné l'ouverture puis la fermeture de l'araignée sans qu'aucune requête ne soit envoyée. L'utilisation de la méthode asynchrone start()

a permis de résoudre ce problème :

async def start(self):
    yield scrapy.Request(...)

C'est le comportement que nous avons observé lors de notre configuration de test.