Le web scraping sans blocages

Tutoriel sur l’extraction de données de sites web en évitant les blocages. Découvrez 9 solutions différentes pour contourner les techniques de blocage utilisées par les sites web contre le web scraping.
16 min de lecture
Web scraping without getting blocked

Le web scraping peut souvent ressembler à une chasse au trésor, au cours de laquelle vous explorez Internet pour trouver des informations cachées qui ne sont pas fournies par les API. Et comme dans toute bonne chasse au trésor, il y a des défis à relever.

Un obstacle notable est la présence de routines de blocage mises en œuvre par les sites cibles pour empêcher les accès indésirables. Ces blocages peuvent survenir pour diverses raisons : politiques strictes vis-à-vis du web scraping, volonté d’éviter l’utilisation abusives des ressources des sites, problèmes de réputation relativement aux questions de propriété intellectuelle des sources considérées, ou détection de (faux) agents utilisateurs.

Mais soyez sans crainte : ce tutoriel vous apprendra comment faire du web scraping sans vous faire bloquer par votre site cible, de manière à trouver facilement votre trésor sur Internet.

Stratégies pour vous aider à contourner les blocages qui entravent votre accès

 

Le web scraping étant un effort complexe, éviter les blocages impose souvent l’utilisation de plusieurs techniques. Voici neuf stratégies que vous pouvez utiliser pour contourner ces blocages indésirables.

1. Comprendre les politiques et les conditions de service de votre cible

 

Lorsque vous commencez à collecter des données sur un nouveau site, vous devez vous familiariser avec celui-ci, sans vous limiter à la simple analyse de la structure HTML de votre page cible. Cette familiarisation doit également inclure la compréhension des politiques et des conditions de service du site en question. Celles-ci font souvent intervenir la politique du site vis-à-vis du web scraping – autorise-t-il ou non le web scraping, et sur quelles pages spécifiques êtes-vous en droit de faire du web scraping ? Le non-respect de ces conditions peut pousser le site à vous bloquer, et vous expose potentiellement à des poursuites judiciaires.

Un document crucial à connaître est le fichier robots.txt. Ce fichier, qui se trouve dans le répertoire racine du site, fournit aux bots des instructions sur les parties du site qui ne peuvent pas être parcourues ou traitées.

Voici un exemple de fichier robots.txt :

User-agent: *
Disallow: /private/
Disallow: /temp/

Ici, le fichier robots.txt indique à tous les bots web (indiqués par * après User-agent) qu’ils doivent s’abstenir d’extraire des données des répertoires private et temp du site web.

Le web scraping responsable implique de respecter les instructions émises par le site considéré.

2. Respecter les normes éthiques en matière de web scraping  

De la même manière que vous devez respecter les politiques mises en place par un site web, il est également recommandé d’adhérer à un certain code de conduite. Les normes éthiques de web scraping vous aident non seulement à éviter de vous faire bloquer, mais aussi à respecter les droits et les ressources de votre site cible.

Le respect des directives suivantes est essentiel :

  • Ne bombardez pas les serveurs avec des requêtes incessantes : prévoyez suffisamment de temps entre les requêtes. Certains sites web peuvent détecter et bloquer les web scrapers qui extraient rapidement de grandes quantités de données parce leur comportement ne ressemble pas à celui d’un être humain. Pour paraître plus naturel et réduire le risque de vous faire bloquer, il est conseillé d’ajouter un délai à vos requêtes. Cependant, plutôt que d’avoir un délai fixe, il est préférable d’utiliser des intervalles irréguliers pour mieux imiter le comportement humain.  
  • Ne collectez pas de données personnelles sans consentement : il ne s’agit pas seulement d’une question éthique, mais bien souvent d’une question juridique. Assurez-vous toujours de disposer des autorisations nécessaires avant de collecter des données personnelles.  
  • Respectez les données obtenues : utilisez les données collectées de manière responsable et légale. Assurez-vous que l’utilisation que vous faites des données est conforme à toutes les lois et réglementations applicables, telles que les législations sur le copyright et la General Data protection Regulation (RGPD).  

Voici comment vous pouvez implémenter en Python des intervalles irréguliers entre vos requêtes :

import time
import random

urls = ['https://www.targetwebsite.com/page1', 'https://www.targetwebsite.com/page2', 'https://www.targetwebsite.com/page3']

for url in urls:
    response = requests.get(url)
    # Process response
    sleep_time = random.uniform(1, 10)  # Generate a random sleep time between 1 and 10 seconds
    time.sleep(sleep_time)  # Sleep for a random time between requests

Ce code parcourt une liste d’URL dans le tableau urls. Pour chaque URL, il lance une requête pour la récupérer, puis il s’interrompt en utilisant la fonction time.sleep() avant de passer à la requête suivante. Ces intervalles aléatoires permettent d’imiter le comportement de navigation humain, ce qui réduit les risques de détection.

3. Utiliser des proxys (rotatifs)  

Un outil utile dans votre boîte à outils de web scraping est le recours aux proxys, en particulier aux proxys rotatifs. Un proxy sert de passerelle entre vous et votre site web cible. Il masque votre adresse IP, ce qui fait que vos requêtes semblent provenir d’emplacements différents.  

Les proxys rotatifs vous permettent d’aller plus loin. Au lieu d’utiliser une adresse IP unique de proxy, ils vous fournissent un pool d’adresses IP. Vos requêtes sont transmises par ces différentes adresses IP, ce qui modifie constamment votre apparence numérique. Cela réduit considérablement le risque qu’a votre web scraper de se faire détecter et bloquer, car il est beaucoup plus difficile pour un site web d’identifier des modèles de comportement dans ces requêtes.

En outre, les proxys rotatifs vous aident à distribuer vos requêtes sur plusieurs adresses IP, ce qui réduit le risque de provoquer l’interdiction d’une adresse IP unique à l’origine d’un trop grand nombre de requêtes.

Voici un extrait de code que vous pouvez utiliser pour implémenter un proxy rotatif en Python :

import requests
from itertools import cycle

# List of proxies
proxy_list = ['ip1:port1', 'ip2:port2', ...] 
proxy_pool = cycle(proxy_list) # create a cycle of proxies

url = 'https://www.targetwebsite.com'

for i in range(1,3):
    # Get a proxy from the pool
    proxy = next(proxy_pool)
    print(f"Request #{i}:")
    try:
        response = requests.get(url, proxies={"http": proxy, "https": proxy})
        print(response.content)
    except:
        # Most free proxies will often get connection errors, so we catch them here
        print("Connection error with proxy:", proxy)

Cet extrait de code utilise une liste de proxys (c’est-à-dire proxy_list) effectuant une rotation de manière à ce que chaque requête exécutée ait une adresse IP différente. Ainsi, il est plus difficile pour les sites de détecter vos opérations de web scraping.

Les proxys rotatifs sont un outil puissant, mais ils doivent s’inscrire dans une stratégie globale. Pour naviguer dans les mers houleuses du web scraping sans vous faire bloquer, vous devez les combiner avec les autres techniques mentionnées dans cet article.

4. Utilisez les bons en-têtes et agents utilisateurs  

Les sites web utilisent souvent des en-têtes et des agents utilisateurs pour détecter les bots. Un agent utilisateur est un en-tête que votre navigateur envoie au serveur, et qui fournit des détails sur le logiciel et le système à l’origine de la requête. Il comprend généralement le type d’application, le système d’exploitation, le fournisseur du logiciel et la version du logiciel. Ces informations aident le serveur à fournir un contenu adapté à votre navigateur et à votre système.

Lorsque vous faites du web scraping, il est essentiel d’utiliser des chaînes d’agents utilisateurs légitimes. En simulant le comportement d’un utilisateur réel, vous pouvez contourner efficacement les mécanismes de détection et réduire les risques de blocage.

Outre l’User-Agent, un autre en-tête important à prendre en compte est l’en-tête Referer. L’en-tête Referer indique l’URL de la page web liée à la ressource demandée. Son inclusion dans les requêtes de votre web scraper permet de donner l’impression qu’un utilisateur réel navigue manuellement d’une page à l’autre.  

Les autres en-têtes utiles que votre web scraper peut inclure sont Accept-Language, Accept-Encoding et Connection. Ces en-têtes sont généralement envoyés par les navigateurs web et sont rarement inclus dans les web scrapers. La plupart du temps, les web scrapers négligent ces en-têtes parce qu’ils n’ont pas d’impact direct sur la récupération des contenus web. Leur inclusion, cependant, permet de rendre plus authentiques les requêtes émises par le web scraper, ce qui réduit les risques de détection.

Voici un extrait de code Python qui définit l’User-Agent et le Referer dans l’en-tête de la requête pour imiter une session de navigation d’un utilisateur humain :

url = 'https://www.targetwebsite.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
    'Referer': 'https://www.google.com/'
}

response = requests.get(url, headers=headers)

5. Gérez les erreurs et les pièges générés par les honeypots

 

Naviguer sur le terrain d’un site web peut s’avérer difficile, du fait de la présence d’obstacles tels que les honeypots. Les honeypots sont des liens cachés, intentionnellement conçus pour passer inaperçus des utilisateurs réels, mais qui peuvent être détectés par les web scrapers et les bots. Ces liens sont souvent masqués à l’aide d’éléments HTML définis comme hidden ou none, ou déguisés en boutons avec une couleur identique à celle de l’arrière-plan de la page. L’objectif principal de l’incorporation des honeypots est d’identifier les bots et de les mettre sur liste noire.

Voici un extrait de code simple que vous pouvez utiliser pour essayer d’éviter les honeypots en Python :

from bs4 import BeautifulSoup
import requests

url = 'https://www.targetwebsite.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

for link in soup.select('a'):
    if 'display' in link.get('style', '') and 'none' in link['style']:
        continue  # Skip this link
    # Process link

Ce code permet d’ignorer tous les liens avec display: none dans l’attribut de style – une caractéristique courante des liens de honeypots.

Lorsque vous extrayez des données, il est également important de faire attention aux erreurs, car il n’est pas rare de rencontrer des erreurs dans les réponses. Ces erreurs sont souvent indiquées par des codes d’état HTTP dans la plage 4xx (erreurs client) ou 5xx (erreurs serveur). La gestion de ces erreurs est essentielle pour éviter de surcharger le serveur avec un nombre excessif de requêtes, ce qui pourrait entraîner un blocage.  

Une stratégie efficace pour gérer de telles erreurs est de mettre en œuvre un algorithme de backoff exponentiel. Cette approche consiste à augmenter progressivement l’intervalle de temps séparant les tentatives successives, ce qui permet de traiter les erreurs plus efficacement.

6. Utilisez un service de résolution de CAPTCHA  

Les CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart, test de Turing public entièrement automatisé permettant de distinguer les ordinateurs des humains) est une mesure de sécurité mise en œuvre par de nombreux sites web pour empêcher les activités automatisées des bots, entre autres le web scraping. Ils sont conçus pour être faciles à résoudre pour les humains, mais difficiles à résoudre pour les machines, d’où leur nom.

Si vous rencontrez des CAPTCHA, envisagez d’utiliser le Web Unlocker de Bright Data. Ce service utilise diverses méthodes – algorithmes d’apprentissage machine, voire intervenants humains – pour déchiffrer les CAPTCHA à votre place. Son rôle est d’automatiser le processus de résolution de CAPTCHA, ce qui permet à votre web scraper de continuer sans entrave le processus d’extraction de données.  

7. Surveillez les limites de débit et les refus d’accès

 

La plupart des sites web imposent des limites de débit et des refus d’accès pour protéger leurs ressources contre les bots. Comme chaque requête que vous envoyez à un serveur consomme des ressources, des milliers de bots qui envoient des requêtes à chaque seconde pourraient facilement provoquer la défaillance d’un serveur ou dégrader les performances d’un site web. Pour éviter cela, les sites web appliquent des limites de débit et certains fournissent même dans leurs réponses un en-tête X-RateLimit-Limit détaillant leurs limites de débit. Vous devez respecter ces limites pour éviter de vous faire bloquer.

Le serveur communique généralement ces restrictions par le biais de codes d’état HTTP. Un code d’état 200 signifie que tout s’est bien passé, mais un code 429 signifie que vous avez envoyé trop de requêtes pendant un intervalle de temps donné. De même, 403 indique un accès interdit, tandis que 503 signifie que le serveur est indisponible, peut-être en raison d’une surcharge. La connaissance de ces codes est essentielle pour assurer la bonne marche de votre extraction de données.

Voici un extrait de code Python qui utilise la bibliothèque Requests pour respecter les limites de débit :

import time
import requests

def respectful_requester(url, delay_interval=1):
    response = requests.get(url)
    # If the status code indicates rate limiting, sleep then retry
    if response.status_code == 429:
        print('Rate limit reached. Sleeping...')
        time.sleep(delay_interval)
        return respectful_requester(url, delay_interval)
    elif response.status_code != 200:
        print(f'Error: {response.status_code}. Try a different proxy or user-agent')
    
    return response

Cette fonction envoie une requête GET à une URL et vérifie la réponse. S’il rencontre un code d’état 429, il s’interrompt pendant un intervalle de temps donné, puis réitère sa requête. Si nécessaire, vous pouvez également implémenter une gestion plus sophistiquée pour d’autres codes d’état.

8. Extrayez des données du cache de Google

Pour les sites web sur lesquels il est difficile de faire du web scraping, ou dont les données sont peu susceptibles d’évoluer avec le temps, une autre stratégie consiste à extraire les données de la copie du site mise en cache par Google plutôt que du site lui-même. Cette technique peut être particulièrement utile lorsque vous avez affaire à des sites web particulièrement vigilants, qui bloquent activement les web scrapers. Ces pages mises en cache peuvent être ciblées à la place des pages web d’origine pour éviter de déclencher des mécanismes anti-scraping. Gardez à l’esprit que cette méthode peut ne pas être infaillible, car certains sites demandent à Google de ne pas mettre en cache leur contenu. En outre, les données du cache de Google peuvent ne pas être à jour.

Pour extraire les données d’un site web à partir de la mémoire cache de Google, il suffit d’ajouter l’URL du site à la fin de l’adresse http://webcache.googleusercontent.com/search?q=cache:. Par exemple, si vous souhaitez collecter des données sur le site de Bright Data, vous pouvez utiliser l’URL suivante : http://webcache.googleusercontent.com/search?q=cache:https://https://brightdata.com/.

Bien que le scraping de la mémoire cache de Google puisse être plus fiable que celui d’un site bloquant activement vos requêtes, n’oubliez pas de considérer les limitations et de vérifier la pertinence des données mises en cache.

9. Utilisez des proxys et des services de web scraping tiers

 

Les web scrapers et les administrateurs des sites web jouant au chat et à la souris de manière de plus en plus pointue, la complexité du maintien d’un système efficace et discret de web scraping augmente. Les sites web continuent à trouver régulièrement de nouvelles façons de détecter, de ralentir ou de bloquer les web scrapers, ce qui impose une approche dynamique pour contourner ces mesures de protection.

Parfois, la meilleure approche consiste à s’en remettre à des spécialistes pour gérer les tâches les plus complexes. C’est là que les proxys et les services de web scraping tiers tels que ceux de Bright Data entrent en jeu. Bright Data suit constamment le développement des dernières technologies anti-scraping et adapte rapidement ses stratégies pour surmonter les nouveaux obstacles.  

Bright Data propose des solutions qui vous aident à imiter de façon convaincante le comportement d’un utilisateur humain – proxys résidentiels en rotation, résolution automatisée de CAPTCHA – ce qui permet à vos web scrapers de passer inaperçus. Ses services sont également conçus pour permettre le traitement de gros volumes de données, ce qui vous permettra de gérer les besoins croissants de vos projets de web scraping avec un effort minimal.    

L’utilisation de ces solutions vous permet de gagner du temps et d’économiser des ressources, ce qui vous permettra de vous concentrer sur d’autres aspects de vos projets, tels que l’analyse et l’exploitation des données obtenues.

Conclusion

À ce stade, vous avez défriché les obstacles susceptibles de contrarier vos tâches de web scraping. Vous êtes maintenant capable de comprendre les politiques de votre cible ; de faire du web scraping en respectant les normes éthiques en vigueur ; d’utiliser des outils tels que les proxys rotatifs, les en-têtes et les agents utilisateurs appropriés ; et de gérer les erreurs et les pièges générés par les honeypots. Vous êtes maintenant bien équipé pour configurer vos projets de web scraping sans vous faire bloquer.

Cependant, n’oubliez pas que même les explorateurs les plus compétents ont besoin d’une boîte à outils fiable. C’est là qu’intervient Bright Data, qui vous offre une gamme complète de services spécialement conçus pour rationaliser vos efforts de web scraping. Utilisez son Web Unlocker pour accéder aux données cachées derrière les CAPTCHA. Vous pouvez également utiliser divers services de proxys, notamment des serveurs proxys robustes, des proxys de centres de données et des proxys résidentiels pour maintenir votre anonymat.  

Bon web scraping !