Comment utiliser des proxys pour provoquer la rotation des adresses IP dans Python

Apprenez comment utiliser les proxys dans Python afin de provoquer la rotation des adresses IP dans le cadre d’un web scraping, où trouver des proxys fiables et comment éviter les blocages de sites Web.
9 min de lecture
Python IP rotation

La rotation des adresses IP à l’aide de proxys est essentielle pour le web scraping, en particulier lorsqu’il s’agit de sites Web modernes susceptibles d’imposer des restrictions. Il est essentiel de répartir vos requêtes sur plusieurs adresses IP pour éviter qu’elles soient bloquées ou soumises à des limites de débit. La rotation des adresses IP complique la tâche des sites Web qui souhaitent suivre et restreindre votre activité de scraping. Cela améliore l’efficacité et la fiabilité de votre processus de web scraping, ce qui vous permet d’extraire les données de manière plus efficace. L’utilisation de proxys et d’adresses IP rotatives pendant un web scraping vous permet d’éviter les bannissements et les pénalités liés à l’adresse IP, de dépasser les limites de débit et d’accéder à du contenu géorestreint.

Cet article explique comment implémenter des proxys dans votre flux de travail de web scraping pour alterner les adresses IP utilisées. Vous découvrirez où trouver des proxys efficaces, des conseils pour la rotation des adresses IP et la façon d’éviter d’être bloqué par le site Web que vous ciblez.

Rotation des adresses IP avec Python

Un processus de scraping classique avec Python tire généralement parti d’une bibliothèque Python telle que Requests ou Scrapy pour accéder à un site Web et analyser son contenu. Vous pouvez ensuite filtrer le contenu du site Web en fonction des informations que vous souhaitez extraire. Voici un exemple de processus de scraping typique :


import requests

url = 'http://example.com'

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

Ce processus vous permet d’obtenir les informations dont vous avez besoin et convient parfaitement aux cas à usage unique ou à ceux pour lesquels vous n’avez besoin d’extraire les données qu’une seule fois. Cependant, ce processus utilise l’adresse IP de votre système pour effectuer des requêtes et peut rencontrer des problèmes en cas de demandes répétées ou continues incitant le site Web à limiter 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, telles que Requests ou Scrapy, destinées au scraping ou à la création de requêtes Web permettent de changer l’adresse IP utilisée pour effectuer ces requêtes. Cependant, vous avez besoin d’une liste ou d’une source d’adresses IP valides pour en tirer parti. Ces sources peuvent être gratuites ou commerciales, telles que les proxys de Bright Data.

Les options commerciales garantissent la validité et fournissent des  outils utiles pour gérer et faire alterner vos proxys afin d’éviter toute interruption de votre processus de scraping. Par exemple, Bright Data propose plusieurs catégories de proxys dont les prix varient en fonction du cas d’utilisation pour lequel ils sont conçus, de leur évolutivité et de la garantie d’un accès débloqué aux données que vous souhaitez :

Services de proxy de Bright Data pour un scraping fluide des données

En utilisant des proxys gratuits, vous pouvez créer une liste en Python contenant des proxys valides que vous pouvez alterner 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"]

Tout ce dont vous avez besoin, c’est d’un mécanisme rotatif qui sélectionne différentes adresses IP dans la liste lorsque vous effectuez plusieurs 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 fois qu’il est appelé. Le proxy est utilisé pour les requêtes de scraping.

Si vous incluez un cas d’erreur pour gérer les proxys non valides, le code de scraping complet ressemblerait à ceci :

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 proxys pour effectuer vos requêtes avec n’importe quel autre framework de scraping, tel que Scrapy.

Effectuer un scraping avec Scrapy

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

Vous pouvez installer Scrapy à l’aide du gestionnaire de packages 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 actuel en utilisant les 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 étoffer grâce à un mécanisme de rotation d’adresses 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 en haut du répertoire du projet pour exécuter ce script de scraping :

scrapy crawl samplebot
Exécution du script

Conseils pour la rotation des adresses IP

Le web scraping est devenu une forme de compétition entre les sites Web et les scrapers, ces derniers imaginant de nouvelles méthodes et techniques pour obtenir les données nécessaires et les sites Web trouvant de nouveaux moyens de leur bloquer l’accès.

La rotation des adresses IP est une technique qui vise à contourner les limites fixées par les sites Web. Prenez en compte les conseils suivants pour optimiser l’efficacité de la rotation des adresses IP et minimiser les risques d’être bloqué par votre site Web cible :

  • Veillez à disposer d’ensemble de proxys vaste et diversifié : lorsque vous utilisez la rotation des adresses IP, vous avez besoin d’un ensemble de proxys important comprenant un grand nombre de proxys et une grande variété d’adresses IP. Cette diversité contribue à une rotation appropriée et réduit le risque d’utilisation excessive des proxys susceptible d’entraîner des limites de débit et des interdictions. Envisagez d’utiliser plusieurs fournisseurs de proxys avec des plages d’adresses IP et des emplacements différents. Pensez également à modifier le calendrier et les intervalles entre vos requêtes avec vos différents proxys afin de mieux simuler le comportement naturel d’un utilisateur.
  • Disposez de solides mécanismes de gestion des erreurs : au cours de votre processus de web scraping, vous pouvez rencontrer un certain nombre d’erreurs dues à des problèmes de connectivité temporaires, à des proxys bloqués ou à des modifications apportées à votre site Web cible. En implémentant la gestion des erreurs dans vos scripts, vous pouvez garantir le bon déroulement de votre processus de scraping, en détectant et en gérant les exceptions courantes telles que les erreurs de connexion, les délais d’attente et les erreurs de statut HTTP. Envisagez de configurer des disjoncteurs pour suspendre temporairement votre processus de scraping si un grand nombre d’erreurs se produisent sur une brève période.
  • Testez vos proxys avant de les utiliser : avant de déployer votre script de scraping en production, utilisez un échantillon de votre ensemble de proxys pour tester la fonctionnalité de rotation des adresses IP et les mécanismes de gestion des erreurs selon différents scénarios. Vous pouvez utiliser des exemples de sites Web pour simuler des conditions réelles et vous assurer que votre script peut gérer ces cas.
  • Surveillez les performances et l’efficacité des proxys : surveillez régulièrement les performances de vos proxys afin de détecter tout problème, tel que des temps de réponse lents ou des pannes fréquentes. Vous devez suivre le taux de réussite de chaque proxy pour identifier ceux qui sont inefficaces. Les fournisseurs de proxys tels que Bright Data proposent des outils permettant de vérifier l’état et les performances de leurs proxys. En surveillant les performances des proxys, vous pouvez rapidement passer à des proxys plus fiables et supprimer ceux qui ne sont pas performants de votre ensemble de rotation.

Le web scraping est un processus itératif, et les sites Web peuvent modifier leur structure et leurs modèles de réponse ou mettre en œuvre de nouvelles mesures pour l’empêcher. Surveillez régulièrement votre processus de scraping et adaptez-vous à tout changement pour maintenir l’efficacité de l’opération.

Conclusion

Cet article vous a présenté la rotation des adresses IP et la manière de l’implémenter dans votre processus de scraping avec Python. Vous avez également appris quelques conseils pratiques pour maintenir l’efficacité de votre processus de scraping avec Python.

Bright Data est votre plateforme unique pour les solutions de web scraping. Il fournit des proxys éthiques et de haute qualité, un navigateur Web de scraping, un environnement de développement intégré (IDE) pour le développement et les processus de vos robots de scraping, des ensembles de données prêts à l’emploi ainsi que plusieurs outils pour faire alterner et gérer les proxys pendant le scraping.