Comment utiliser des proxies pour faire pivoter les adresses IP en Python

Découvrez comment utiliser des proxies en Python pour la rotation d’IP dans le scraping web, où trouver des proxies fiables et des conseils pour éviter les blocages.
8 min de lecture
Python IP rotation

La rotation d’IP à l’aide de proxies est essentielle dans le scraping web, notamment avec les sites modernes qui peuvent imposer des restrictions. Distribuer vos requêtes sur plusieurs adresses IP est crucial pour éviter d’être bloqué ou soumis à des limites de débit. La rotation des adresses IP rend plus difficile pour les sites web de tracer et de restreindre votre activité de scraping. Cela améliore l’efficacité et la fiabilité de votre processus de scraping web, vous permettant d’extraire des données plus efficacement. L’utilisation de proxies et la rotation des adresses IP lors du scraping web vous permettent d’éviter les bannissements basés sur l’IP, de surmonter les limites de débit et d’accéder à des contenus géo-restreints.

Cet article explique comment intégrer des proxies dans votre workflow de scraping web pour faire pivoter les adresses IP utilisées. Vous découvrirez où obtenir des proxies efficaces, les conseils pour la rotation d’IP, et comment éviter d’être bloqué par votre site cible.

Rotation d’IP avec Python

Un processus de scraping classique avec Python utilise généralement une bibliothèque Python comme Requests ou Scrapy pour accéder à un site web et analyser son contenu. Vous pouvez ensuite filtrer le contenu du site pour extraire les informations souhaitées. Voici un exemple d’un processus de scraping typique :


import requests

url = 'http://example.com'

# Make requests 
response = requests.get(url)
print(response.text)

Ce processus vous fournit les informations dont vous avez besoin et convient aux cas d’usage uniques ou aux situations où vous n’avez besoin d’extraire des données qu’une seule fois. Cependant, il utilise l’IP de votre système pour effectuer des requêtes et peut rencontrer des problèmes lors de requêtes répétées ou continues où le site limite l’accès au fil du temps.

Les résultats de l’exemple de processus de scraping sont les suivants :

<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", 
…

La plupart des bibliothèques Python, comme Requests ou Scrapy, destinées au scraping ou aux requêtes web offrent un moyen de changer l’adresse IP utilisée pour ces requêtes. Cependant, pour en tirer parti, vous avez besoin d’une liste ou d’une source d’adresses IP valides. Ces sources peuvent être gratuites ou commerciales, comme les proxies Bright Data.

Les options commerciales garantissent la validité et fournissent des outils utiles pour gérer et faire pivoter vos proxies afin d’assurer une continuité de votre processus de scraping. Par exemple, Bright Data propose plusieurs catégories de proxies tarifées différemment selon le cas d’usage, la capacité de mise à l’échelle et le niveau de garantie d’accès non bloqué à vos données :

Les services de proxy de Bright Data pour un scraping de données fluide

En utilisant des proxies gratuits, vous pouvez créer une liste en Python contenant des proxies valides que vous pouvez faire pivoter tout au long de votre processus de scraping :


proxies = ["103.155.217.1:41317", "47.91.56.120:8080", "103.141.143.102:41516", "167.114.96.13:9300", "103.83.232.122:80"]

Avec cela, il vous suffit d’un mécanisme de rotation qui sélectionne différentes adresses IP dans la liste lors de vos multiples requêtes. En Python, cela ressemblerait à la fonction suivante :

import random
import requests

def scraping_request(url):

   ip = random.randrange(0, len(proxies))
   
   ips = {"http": proxies[ip], "https": proxies[ip]}
   response = requests.get(url, proxies=ips)
   print(f"Proxy currently being used: {ips['https']}")
   return response.text

Ce code sélectionne un Proxy aléatoire dans votre liste à chaque appel. Le Proxy est utilisé dans les requêtes de scraping.

L’ajout d’un cas d’erreur pour gérer les proxies invalides donnerait le code de scraping complet suivant :

import random
import requests

proxies = ["103.155.217.1:41317", "47.91.56.120:8080", "103.141.143.102:41516", "167.114.96.13:9300", "103.83.232.122:80"]
def scraping_request(url):

   ip = random.choice(proxies)
   try:
      response = requests.get(url, proxies={"http": ip, "https": ip})
      if response.status_code == 200:   
         print(f"Proxy currently being used: {ip}")
   ip = random.randrange(0, len(proxies))
   
   ips = {"http": proxies[ip], "https": proxies[ip]}
   response = requests.get(url, proxies=ips)
   try:

      if response.status_code == 200:   
         print(f"Proxy currently being used: {ips['https']}")
         print(response.text)   

      elif response.status_code == 403:
         print("Forbidden client")

      elif response.status_code == 429:
         print("Too many requests")
         
   except Exception as e:
      print(f"An unexpected error occurred: {e}")

                
scraping_request("http://example.com")

Vous pouvez également utiliser cette liste rotative de proxies pour effectuer vos requêtes avec tout autre framework de scraping, comme Scrapy.

Scraping avec Scrapy

Avec Scrapy, vous devez installer la bibliothèque et créer les artefacts de projet nécessaires avant de pouvoir explorer le web avec succès.

Vous pouvez installer Scrapy à l’aide du gestionnaire de paquets pip dans votre environnement compatible Python :

pip install Scrapy

Une fois installé, vous pouvez générer un projet Scrapy avec des fichiers modèles dans votre répertoire courant à l’aide des commandes suivantes :

scrapy startproject sampleproject

cd sampleproject

scrapy genspider samplebot example.com

Ces commandes génèrent également un fichier de code de base que vous pouvez enrichir avec un mécanisme de rotation d’IP.

Ouvrez le fichier sampleproject/spiders/samplebot.pysamplebot.py et mettez-le à jour avec le code suivant :


import scrapy
import random

proxies = ["103.155.217.1:41317", "47.91.56.120:8080", "103.141.143.102:41516", "167.114.96.13:9300", "103.83.232.122:80"]
ip = random.randrange(0, len(proxies))
   
class SampleSpider(scrapy.Spider):
    name = "samplebot"
    allowed_domains = ["example.com"]
    start_urls = ["https://example.com"]
    
    def start_requests(self):
        for url in self.start_urls:
            proxy = random.choice(proxies)
            yield scrapy.Request(url, meta={"proxy": f"http://{proxy}"})

    request = scrapy.Request(
        "http://www.example.com/index.html",
        meta={"proxy": f"http://{ip}"}
    )
    def parse(self, response):
        # Log the proxy being used in the request
        proxy_used = response.meta.get("proxy")
        self.logger.info(f"Proxy used: {proxy_used}") 
        print(response.text)

Exécutez la commande suivante à la racine du répertoire du projet pour lancer ce script de scraping :

scrapy crawl samplebot
Exécution du script

Conseils pour la rotation d’IP

Le scraping web est devenu une forme de compétition entre les sites web et les scrapers, ces derniers développant de nouvelles méthodes pour obtenir les données nécessaires tandis que les sites trouvent de nouvelles façons de bloquer l’accès.

La rotation d’IP est une technique visant à contourner les limitations imposées par les sites web. Pour maximiser l’efficacité de la rotation d’IP et minimiser les risques d’être bloqué par votre site cible, tenez compte des conseils suivants :

  • Assurez-vous d’avoir un pool de proxies large et diversifié : Lors de l’utilisation de la rotation d’IP, vous avez besoin d’un pool de proxies important avec un grand nombre de proxies et une grande variété d’adresses IP. Cette diversité favorise une rotation correcte et réduit le risque de surutilisation des proxies, ce qui pourrait entraîner des limites de débit et des bannissements. Envisagez d’utiliser plusieurs fournisseurs de proxies avec différentes plages d’IP et localisations. Pensez également à varier le timing et les intervalles entre vos requêtes avec vos différents proxies pour mieux simuler le comportement naturel d’un utilisateur.
  • Mettez en place des mécanismes robustes de gestion des erreurs : Lors de votre processus de scraping web, vous pouvez rencontrer diverses erreurs dues à des problèmes de connectivité temporaires, des proxies bloqués ou des modifications de votre site cible. En implémentant la gestion des erreurs dans vos scripts, vous pouvez assurer une exécution fluide de votre processus de scraping, en capturant et gérant les exceptions courantes telles que les erreurs de connexion, les délais d’attente et les erreurs de statut HTTP. Envisagez de mettre en place des disjoncteurs pour suspendre temporairement votre processus de scraping si un grand nombre d’erreurs survient en peu de temps.
  • Testez vos proxies avant utilisation : Avant de déployer votre script de scraping en production, utilisez un échantillon de votre pool de proxies pour tester la fonctionnalité de rotation d’IP et les mécanismes de gestion des erreurs dans différents scénarios. Vous pouvez utiliser des sites de test pour simuler des conditions réelles et vous assurer que votre script peut gérer ces cas.
  • Surveillez les performances et l’efficacité des proxies : Surveillez régulièrement les performances de vos proxies pour détecter tout problème, comme des temps de réponse lents ou des échecs fréquents. Suivez le taux de succès de chaque proxy pour identifier les moins efficaces. Des fournisseurs de proxies comme Bright Data proposent des outils pour vérifier la santé et les performances de leurs proxies. En surveillant les performances des proxies, vous pouvez rapidement basculer vers des proxies plus fiables et supprimer les moins performants de votre pool de rotation.

Le scraping web est un processus itératif, et les sites peuvent modifier leur structure, leurs modèles de réponse ou mettre en place de nouvelles mesures anti-scraping. Surveillez régulièrement votre processus de scraping et adaptez-vous aux changements pour maintenir l’efficacité de vos efforts de collecte de données.

Conclusion

Cet article a exploré la rotation d’IP et comment la mettre en œuvre dans votre processus de scraping avec Python. Vous avez également appris des conseils pratiques pour maintenir l’efficacité de votre processus de scraping avec Python.

Bright Data est votre infrastructure tout-en-un pour les solutions de scraping web. Elle fournit des proxies de haute qualité et éthiques, un Navigateur de scraping, un IDE pour le développement de vos bots de scraping, des jeux de données prêts à l’emploi, et plusieurs outils pour la rotation et la gestion des proxies pendant le scraping.