Skip to content
Intermediate / 5 min read

Proxy rotatif avec Python Requests : comment faire tourner les IP pour le web scraping (et quand une passerelle WireGuard est préférable)

Apprenez à faire tourner des proxys dans Python requests pour un web scraping fiable, y compris la prise en charge de SOCKS5, la gestion des sessions et la récupération après erreur. Comparez les proxys rotatifs aux passerelles WireGuard dédiées pour des besoins d'IP stable.

SOCKS5 WireGuard Scraping Web Confidentialité/Anonymat

Aperçu

La rotation de proxys avec Python requests est un moyen courant de répartir les requêtes de web scraping sur plusieurs adresses IP, ce qui réduit le risque de limitation de débit ou de blocage. Ce tutoriel montre comment implémenter la rotation de proxys dans Python requests, y compris les proxys HTTP et SOCKS5, la logique de nouvelle tentative et la vérification. Il explique aussi quand une passerelle WireGuard dédiée (comme NordLayer) est plus adaptée que des proxys rotatifs.

Prérequis

  • Python 3.8 ou version ultérieure installé.
  • La bibliothèque requests.
  • Pour les proxys SOCKS5, installez requests[socks], qui inclut PySocks.
  • Une liste de serveurs proxy (HTTP, HTTPS ou SOCKS5) fournis par un fournisseur.

Comment fonctionne la rotation de proxys avec Python Requests

requests prend en charge les proxys via le paramètre proxies. Chaque requête peut utiliser un proxy différent si vous faites tourner le proxy avant d'appeler requests.get(). Pour SOCKS5, le schéma est socks5:// ou socks5h:// (pour résoudre le DNS via le proxy).

Étapes

  1. Installez les bibliothèques requises.
    pip install requests requests[socks]
    
  2. Préparez votre liste de proxys. Conservez les identifiants dans des variables d'environnement ou un fichier de configuration, pas dans le code source.
    import os
    proxies_list = [
        'http://user:[email protected]:8080',
        'http://user:[email protected]:8080',
        'socks5://user:[email protected]:1080',
    ]
    
  3. Choisissez une stratégie de rotation. La plus simple consiste à parcourir une liste en boucle.
    from itertools import cycle
    proxy_pool = cycle(proxies_list)
    
  4. Envoyez des requêtes avec un proxy rotatif. Incluez des délais d'attente et gérez les exceptions.
    import requests
    url = 'https://httpbin.org/ip'
    for i in range(5):
        proxy = next(proxy_pool)
        try:
            resp = requests.get(url, proxies={'http': proxy, 'https': proxy}, timeout=10)
            print(resp.json())
        except requests.exceptions.RequestException as e:
            print(f'Proxy {proxy} failed: {e}')
    
  5. Pour une rotation plus robuste, combinez la rotation avec une logique de nouvelle tentative à l'aide d'une requests.Session et d'un HTTPAdapter.
    from requests.adapters import HTTPAdapter
    from urllib3.util.retry import Retry
    
    session = requests.Session()
    retries = Retry(total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504])
    session.mount('http://', HTTPAdapter(max_retries=retries))
    session.mount('https://', HTTPAdapter(max_retries=retries))
    
    proxy = next(proxy_pool)
    resp = session.get(url, proxies={'http': proxy, 'https': proxy}, timeout=10)
    print(resp.json())
    
  6. Vérifiez que l'IP change. Le point de terminaison https://httpbin.org/ip renvoie l'IP d'origine. Consignez-la ou affichez-la pour chaque requête.
  7. Mettez en place des contrôles d'état. Retirez du pool les proxys qui échouent de façon répétée.
    def is_proxy_alive(proxy):
        try:
            requests.get('https://httpbin.org/ip', proxies={'http': proxy, 'https': proxy}, timeout=5)
            return True
        except requests.exceptions.RequestException:
            return False
    
    healthy_proxies = [p for p in proxies_list if is_proxy_alive(p)]
    

Résolution des problèmes courants

  • 407 Proxy Authentication Required : Vérifiez le nom d'utilisateur et le mot de passe dans l'URL du proxy. Encodez les caractères spéciaux en pourcentage.
  • Erreurs de connexion SOCKS5 : Assurez-vous d'avoir installé requests[socks] et que l'URI du proxy utilise socks5:// ou socks5h://.
  • Erreurs SSL : Certains proxys ne prennent pas en charge le tunneling HTTPS. Utilisez des proxys HTTP uniquement pour les cibles HTTP, ou passez à un fournisseur qui prend en charge CONNECT.
  • Réponses lentes : Augmentez le délai d'attente, réduisez la concurrence ou utilisez un proxy avec une latence plus faible.
  • L'IP ne change pas : Vérifiez que le proxy est réellement utilisé en inspectant resp.json(). Vérifiez aussi que votre code fait tourner le proxy avant chaque requête.

Quand une passerelle WireGuard dédiée est plus pertinente

Les proxys rotatifs sont idéaux pour le scraping anonyme à grande échelle, où chaque requête peut provenir d'une IP différente. Cependant, certaines tâches nécessitent une adresse IP stable et dédiée :

  • Maintenir une session connectée sur un site qui signale les changements d'IP.
  • Le suivi du classement SEO depuis un emplacement fixe.
  • Accéder à des outils internes ou des API avec une liste d'autorisation d'IP. Dans ces cas, une passerelle WireGuard dédiée telle que NordLayer fournit un tunnel VPN stable, de qualité professionnelle, avec une facturation mensuelle fixe. NordLayer propose des passerelles dédiées, de sorte que votre équipe dispose d'une IP cohérente pour un accès réseau sécurisé. Ce n'est pas un service de proxy rotatif, mais il complète les proxys rotatifs en couvrant les cas d'usage qui nécessitent une IP de sortie fixe.

Résumé

Vous pouvez faire tourner des proxys dans Python requests en parcourant une liste de proxys, en gérant les exceptions et en vérifiant l'IP d'origine. Pour SOCKS5, installez requests[socks]. Utilisez une logique de nouvelle tentative et des contrôles d'état pour maintenir la fiabilité du scraping. Lorsque vous avez besoin d'une IP stable et dédiée plutôt que d'une rotation, envisagez une passerelle WireGuard dédiée comme NordLayer pour l'accès des équipes et les tâches à IP fixe.