Comment faire une rotation de Proxys en Python

Maîtrisez la rotation de proxys en Python pour surmonter les bannissements d’IP et optimiser votre processus de scraping web.
13 min de lecture
How to Rotate Proxies in Python blog image

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, et async.py sont 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éthode random.choice().
  • La boucle for itère sur la liste aléatoire de proxys et effectue la requête réelle avec la méthode requests.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ête GET au 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.

É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 :

Créez un compte Bright Data dès aujourd’hui pour tester nos proxys et nos solutions de scraping !