Dans ce guide sur la façon de faire une rotation de proxys en Python, vous apprendrez :
- Ce que sont les proxys et pourquoi les utiliser
- Ce qu’est la rotation de proxy et pourquoi vous pourriez en avoir besoin
- Comment faire une rotation de proxys en Python
- Les limitations courantes lors de la rotation de proxys en Python
Allons-y !
Qu’est-ce qu’un Proxy ?
Un proxy est un serveur qui agit comme intermédiaire entre un utilisateur et une ressource réseau sur Internet. Vous pouvez donc considérer un proxy comme un intermédiaire qui transmet les requêtes et les réponses entre les parties.
Pourquoi Utiliser des Proxys en Python ?
Lorsque vous envoyez une requête à un site web en utilisant un proxy, la requête passe d’abord par le serveur proxy. Ensuite, le proxy transmet votre requête au site web, reçoit la réponse et vous la renvoie. Ce processus masque votre adresse IP vis-à-vis de la destination, donnant l’impression que la requête provient du serveur proxy plutôt que de votre appareil.
La raison typique d’utiliser un proxy est l’automatisation de requêtes web ou le scraping web. Dans ce scénario, Python est l’un des meilleurs langages pour le scraping web, grâce à ses nombreuses bibliothèques et à sa communauté large et active.
Qu’est-ce que la Rotation de Proxy et Pourquoi en Avez-Vous Besoin ?
Si vous effectuez trop de requêtes depuis une seule adresse IP, les sites web peuvent vous bloquer via une limitation de débit ou une interdiction pure et simple de l’IP. C’est là que la rotation de proxy via des proxys entre en jeu.
Changer systématiquement entre différents serveurs proxy lors de requêtes web est l’une des meilleures façons d’implémenter la rotation d’adresse IP. Cette procédure vous aide à contourner les techniques anti-scraping courantes et vous apporte les avantages suivants :
- Éviter les blocages IP : Distribuez les requêtes sur plusieurs IP, rendant plus difficile la détection et le blocage de votre activité de scraping par les sites web.
- Contourner les limites de débit : Les sites web fixent souvent des limites de requêtes par adresse IP dans un délai donné. La rotation de proxys vous permet de continuer à scraper même après avoir atteint ces limites sur une IP.
- Accéder au contenu géo-restreint : Certains sites web affichent un contenu différent selon la localisation géographique. La rotation de proxy avec des proxys de différents pays vous permet d’accéder à un contenu spécifique à une localisation.
Comment Faire une Rotation de Proxys en Python : 3 Approches
Maintenant que vous savez ce que sont les proxys et pourquoi les faire tourner, préparez-vous à quelques tutoriels étape par étape en Python. Les paragraphes suivants vous montreront comment faire une rotation de proxys en Python en utilisant différentes approches et bibliothèques.
Le site cible pour tous les scripts sera le point de terminaison /ip du projet HTTPBin. Ce point de terminaison spécial renvoie l’adresse IP de l’appelant, ce qui le rend parfait pour tester si l’IP vue par le serveur tourne bien.
Il est temps de faire tourner quelques proxys en Python !
Exigences
Pour reproduire les tutoriels de rotation de proxys avec Python, vous devez avoir Python 3.7 ou supérieur installé sur votre machine.
Prérequis
Supposons que vous appeliez le dossier principal de votre projet proxy_rotation/. À la fin de cette étape, le dossier aura la structure suivante :
proxy_rotation/
├── requests_file.py
├── async.py
├── scrapy_rotation/
└── venv/
Où :
requests.py, etasync.pysont des fichiers Python qui stockent respectivement la logique de rotation de proxy pour Requests et AIOHTTP.scrapy_rotation/est un dossier qui contient un projet Scrapy. Vous le créerez et l’instancierez plus tard.venv/contient l’environnement virtuel
Vous pouvez créer le répertoire d’environnement virtuel venv/ comme ceci :
python -m venv venv
Pour l’activer, sur Windows, exécutez :
venvScriptsactivate
De façon équivalente, sur macOS et Linux, exécutez :
source venv/bin/activate
Comme dernier prérequis, vous devez récupérer une liste de proxys. Pour cet article, vous pouvez utiliser notre liste de proxys gratuits.
Comment Faire une Rotation de Proxys en Python Avec Requests
Dans cette section du tutoriel, vous apprendrez à faire une rotation de proxys en Python avec Requests.
Étape n°1 : Installer les Dépendances
Dans l’environnement virtuel activé, installez Requests avec :
pip install requests
Étape n°2 : Définir la Logique de Rotation
Pour faire une rotation de proxys en Python avec Requests, écrivez le code suivant dans le fichier requests_file.py :
import random
import requests
# Définir une liste de proxys et en renvoyer un au hasard
def get_random_proxy():
proxies = [
"http://PROXY_1:PORT_X",
"http://PROXY_2:PORT_Y",
"http://PROXY_3:PORT_X",
# Ajoutez plus de proxys ici...
]
# Choisir un proxy au hasard
return random.choice(proxies)
for i in range(3):
proxy_url = get_random_proxy()
proxies = {
"http": proxy_url,
"https": proxy_url,
}
response = requests.get("https://httpbin.io/ip", proxies=proxies)
print(response.text)
Où :
- La fonction
get_random_proxy()stocke la liste des proxys que vous avez récupérés et en renvoie un au hasard avec la méthoderandom.choice(). - La boucle
foritère sur la liste aléatoire de proxys et effectue la requête réelle avec la méthoderequests.get(). Pour plus d’informations, consultez notre guide sur l’utilisation d’un proxy avec Python Requests.
Étape n°3 : Lancer le Script
Pour lancer le script, exécutez :
python requests_file.py
Voici la réponse attendue :
{
"origin": "PROXY_3:PORT_K"
}
{
"origin": "PROXY_1:PORT_N"
}
{
"origin": "PROXY_2:PORT_P"
}
Parfait ! Les IP de sortie de votre script ont été tournées comme souhaité.
Comment Faire une Rotation de Proxys en Python Avec AIOHTTP
La principale limitation de l’approche aléatoire utilisant la bibliothèque Requests est qu’elle utilise un proxy à la fois. Cela signifie que vous devez attendre la fin de chaque requête avant que le proxy suivant soit utilisé.
Pour éviter cette limitation, vous pouvez utiliser AIOHTTP. Cette bibliothèque vous permet d’effectuer des requêtes asynchrones, utilisant ainsi plusieurs proxys simultanément de manière non bloquante. En d’autres termes, elle vous permet de faire tourner les proxys de votre liste en effectuant des requêtes asynchrones et parallèles vers le serveur cible. Découvrez AIOHTTP en action dans notre guide sur le scraping web asynchrone.
La section suivante montre comment faire une rotation de proxys en Python avec AIOHTTP.
Étape n°1 : Installer les Dépendances
Dans l’environnement virtuel activé, installez AIOHTTP avec :
pip install aiohttp
Étape n°2 : Définir la Logique de Rotation
Pour faire une rotation de proxys en Python avec AIOHTTP, écrivez le code suivant dans le fichier async.py :
import asyncio
import aiohttp
# Définir une liste de proxys
proxies_list = [
"http://PROXY_1:PORT_X",
"http://PROXY_2:PORT_Y",
"http://PROXY_3:PORT_X",
# Ajoutez plus de proxys ici...
]
async def fetch_ip(session, proxy_address, attempt):
print(f"Tentative {attempt} utilisant le proxy : {proxy_address}")
async with session.get("https://httpbin.io/ip", proxy=proxy_address) as response:
json_response = await response.json()
print(f"Réponse de httpbin.io/ip (Tentative {attempt}):")
print(f"Adresse IP : {json_response.get('origin', 'Inconnue')}")
print("-" * 40)
return json_response
async def main():
async with aiohttp.ClientSession() as session:
tasks = []
num_attempts = 3
for i in range(num_attempts):
# Faire tourner les proxys en utilisant l'opérateur modulo.
proxy_address = proxies_list[i % len(proxies_list)]
tasks.append(fetch_ip(session, proxy_address, i + 1))
# Exécuter toutes les requêtes simultanément
await asyncio.gather(*tasks)
# Lancer le script
asyncio.run(main())
Ce code fait ce qui suit :
- La fonction
fetch_ip()gère les requêtes en prenant la session, un proxy et le numéro de tentative. En particulier, elle envoie une requêteGETau site web cible et imprime la réponse. - La fonction
main():- Crée une session avec la méthode
aiohttp.ClientSession()pour gérer les connexions HTTP. - Met en place une liste de tâches pour envoyer plusieurs requêtes simultanément et le nombre de tentatives.
- Fait tourner les proxys en utilisant l’opérateur modulo (
i % len(proxies_list)) pour garantir que les proxys sont réutilisés en mode round-robin si le nombre de requêtes dépasse le nombre de proxys. Découvrez-en plus dans notre tutoriel sur comment configurer un proxy dans AIOHTTP. - Utilise la méthode
asyncio.gather()pour exécuter toutes les tâches simultanément.
- Crée une session avec la méthode
Étape n°3 : Lancer le Script
Pour lancer le script, exécutez :
python async.py
Voici la réponse attendue :
Tentative 1 utilisant le proxy : http://PROXY_1:PORT_X
Tentative 2 utilisant le proxy : http://PROXY_2:PORT_Y
Tentative 3 utilisant le proxy : http://PROXY_3:PORT_Z
Réponse de httpbin.io/ip (Tentative 3):
Adresse IP : xxx.xxx.xxx.xxx
----------------------------------------
Réponse de httpbin.io/ip (Tentative 1):
Adresse IP : yyy.yyy.yyy.yyy
----------------------------------------
Réponse de httpbin.io/ip (Tentative 2):
Adresse IP : zzz.zzz.zzz.zzz
----------------------------------------
Incroyable ! Les IP tournent comme prévu.
Comment Faire une Rotation de Proxys Avec Python Scrapy
Dans un article précédent, nous avons évoqué la possibilité de faire une rotation de proxys en Python avec Scrapy en utilisant scrapy-rotating-proxies.
Dans cette section guidée, vous apprendrez comment faire cela !
Étape n°1 : Installer les Dépendances
Dans l’environnement virtuel activé, installez les bibliothèques nécessaires :
pip install scrapy scrapy-rotating-proxies
Étape n°2 : Créer un Nouveau Projet Scrapy
Dans le dossier principal de votre dépôt (proxy_rotation/), instanciez un nouveau projet Scrapy avec cette commande :
scrapy startproject scrapy_rotation
Cela créera un nouveau sous-dossier appelé scrapy_rotation/ ayant la structure suivante :
scrapy_rotation/
├── scrapy_rotation/
│ ├── __init__.py
│ ├── items.py # Définit la structure de données pour les éléments scrapés
│ ├── middlewares.py # Middlewares personnalisés
│ ├── pipelines.py # Gère le post-traitement des données scrapées
│ ├── settings.py # Paramètres du projet
│ └── spiders/ # Dossier pour tous les spiders
└── scrapy.cfg # Fichier de configuration Scrapy
Depuis le dossier principal (proxy_rotation/), déplacez-vous vers le dossier scrapy_rotation/ :
cd scrapy_rotation
Vous pouvez maintenant créer un nouveau spider pointant vers le site web cible en exécutant :
scrapy genspider rotation http://httpbin.io/ip
Ce script crée également le fichier rotation.py dans le dossier spiders/.
Étape n°3 : Définir la Logique de Rotation
La logique de rotation de proxy peut être gérée en modifiant le fichier settings.py avec les paramètres suivants :
# Activer le middleware de rotation de proxys
DOWNLOADER_MIDDLEWARES = {
"rotating_proxies.middlewares.RotatingProxyMiddleware": 610,
"rotating_proxies.middlewares.BanDetectionMiddleware": 620,
}
# Liste des proxys à faire tourner
ROTATING_PROXY_LIST = [
"http://PROXY_1:PORT_X",
"http://PROXY_2:PORT_Y",
"http://PROXY_3:PORT_Z",
# Ajoutez plus de proxys si nécessaire
]
# Configurer les paramètres de nouvelle tentative
RETRY_TIMES = 5 # Nombre de tentatives pour les requêtes échouées
RETRY_HTTP_CODES = [500, 502, 503, 504, 408] # Codes HTTP à réessayer
Ce qui gère la rotation de proxy ici est l’option rotating_proxies.middlewares.RotatingProxyMiddleware: 610 dans DOWNLOADER_MIDDLEWARES. En particulier, cette option sélectionne un proxy dans ROTATING_PROXY_LIST et l’attribue à chaque requête.
De plus, l’option rotating_proxies.middlewares.BanDetectionMiddleware: 620 permet au scraper de détecter si une IP a été bannie ou bloquée par le site web cible. Si une requête échoue pour cette raison, le middleware réessaiera la requête avec un nouveau proxy. Cette option fonctionne donc en étroite collaboration avec RotatingProxyMiddleware pour garantir que les proxys bannis sont automatiquement évités.
Maintenant, dans le fichier rotation.py du dossier spiders/, vous pouvez écrire ce qui suit :
import scrapy
class IpSpider(scrapy.Spider):
name = "ip_spider"
start_urls = ["http://httpbin.io/ip"]
def parse(self, response):
# Extraire et imprimer l'adresse IP de la réponse
ip = response.json().get("origin")
self.log(f"Adresse IP : {ip}")
Cette classe instancie l’ensemble du spider et imprime la réponse à chaque requête.
Étape n°4 : Lancer le Script
Pour lancer le script, vous devez utiliser le nom de la classe IpSpider()—qui est ip_spider :
scrapy crawl ip_spider
Les données renvoyées par Scrapy sur le CLI sont particulièrement complètes. Donc, si tout s’est bien passé, parmi d’autres informations, vous trouverez quelque chose comme ceci :
2026-02-18 14:55:17 [rotating_proxies.expire] DEBUG: Proxy <http://PROXY_1:PORT_X> is GOOD
2026-02-18 14:55:17 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://httpbin.io/robots.txt> (referer: None)
2026-02-18 14:55:24 [rotating_proxies.middlewares] INFO: Proxies(good: 1, dead: 0, unchecked: 2, reanimated: 0, mean backoff time: 0s)
Limitations des Approches Ci-Dessus pour la Rotation de Proxy en Python
Les méthodes de rotation de proxy mentionnées ci-dessus sont utiles, mais elles comportent certaines limitations :
- Elles nécessitent de récupérer et gérer manuellement une liste de proxys.
- Elles impliquent du code répétitif.
- Elles peuvent quand même entraîner des bannissements d’IP si vous n’utilisez pas des serveurs proxy de haute qualité.
Si vous cherchez une façon plus efficace de gérer la rotation de proxy en Python, Bright Data propose certains des meilleurs proxys rotatifs du marché. Avec une seule URL de proxy, vous pouvez les intégrer à votre client HTTP ou bibliothèque de scraping. Cela élimine le besoin de code répétitif et de gestion manuelle de la rotation.
Les autres avantages clés de cette approche sont :
- Rotation automatique des IP avec des IP persistantes configurables
- Accès à 400M+ monthly millions d’IPs résidentielles
- Contrôle de la géolocalisation sur les emplacements des serveurs proxy
- Prise en charge des protocoles HTTP, HTTPS et SOCKS
Simplifiez la gestion de vos proxys—découvrez nos proxys à rotation automatique !
Conclusion
Dans cet article, vous avez appris à faire une rotation de proxys en Python en utilisant trois bibliothèques différentes : Requests, AIOHTTP et Scrapy. Comme démontré dans les sections guidées ci-dessus, le processus n’est pas complexe et ne nécessite que quelques lignes de code.
Cependant, cette approche comporte quelques inconvénients :
- Le code est très répétitif, rendant votre script moins maintenable.
- Vous devez gérer et fournir l’accès à une grande liste de serveurs proxy.
Heureusement, vous pouvez éviter tous ces tracas avec les proxys à rotation automatique de Bright Data—une solution plus efficace pour faire une rotation de proxys en Python.
Bright Data contrôle les meilleurs serveurs proxy au monde, au service des entreprises du Fortune 500 et de 50,000+ clients. Son offre comprend une large gamme de types de proxys :
- Proxys de centre de données – Plus de 1,300,000+ IP de centre de données.
- Proxys résidentiels – Plus de 400M+ monthly IPs résidentielles dans plus de 195 pays.
- Proxys ISP – Plus de 1,300,000+ IP ISP.
Créez un compte Bright Data dès aujourd’hui pour tester nos proxys et nos solutions de scraping !