Passer au contenu

403 Interdit : le fléau des grattoirs Web (et comment l'éviter)

Si vous avez déjà essayé de récupérer des données sur des sites Web, vous avez presque certainement rencontré la redoutable erreur « 403 Forbidden » à un moment donné. Ce code d'état HTTP indique que le serveur a compris votre demande, mais refuse d'y répondre. En d’autres termes, vous n’êtes pas autorisé à accéder à la ressource que vous avez demandée.

Pour les web scrapers, les erreurs 403 sont un casse-tête constant. Les sites Web les utilisent pour empêcher tout accès non autorisé aux pages et pour bloquer le trafic qui semble provenir de robots ou de scrapers plutôt que d'utilisateurs humains. Obtenir une réponse 403 peut mettre un terme à votre projet de web scraping.

Mais ne désespérez pas ! Même si les erreurs 403 peuvent être frustrantes, elles ne sont pas insurmontables. Avec les bonnes techniques, il est possible d'éviter de déclencher des erreurs 403 et d'assurer le bon fonctionnement de votre web scraper. Dans ce guide, nous examinerons les causes des erreurs 403 et explorerons les stratégies pour les éviter. Commençons!

Pourquoi les Web Scrapers rencontrent des erreurs 403

Il existe plusieurs raisons principales pour lesquelles un web scraper peut recevoir une réponse 403 Forbidden d'un site Web :

  1. Demander une ressource restreinte: Certaines pages sont tout simplement interdites aux utilisateurs non autorisés. Par exemple, essayer d'accéder à une page qui nécessite d'être connecté, comme un tableau de bord utilisateur, entraînera souvent une erreur 403 si vous n'avez pas de session valide.

  2. Authentification manquante: De nombreux sites Web nécessitent une certaine forme d'authentification, telle que la connexion avec un nom d'utilisateur et un mot de passe, pour accéder à certaines pages. Si votre grattoir Web ne fournit pas les informations d'authentification nécessaires, il recevra probablement une réponse 403.

  3. Détection de bots: Les sites Web utilisent souvent diverses techniques pour détecter et bloquer le trafic qui semble provenir de robots ou de scrapers. Si un site pense que votre grattoir Web est un outil automatisé plutôt qu'un utilisateur humain, il peut répondre par une erreur 403.

  4. Systèmes anti-bots: Certains sites Web utilisent des solutions anti-bot dédiées comme Cloudflare, Imperva ou PerimeterX pour se protéger contre le scraping et autres menaces automatisées. Ces systèmes analysent les modèles de trafic et bloquent les demandes qui semblent suspectes, renvoyant souvent des erreurs 403.

Pour réussir à supprimer des sites Web, nous avons besoin de moyens d'éviter ces problèmes et de convaincre les sites que notre grattoir Web est un utilisateur légitime et autorisé. Heureusement, nous pouvons adopter plusieurs approches. Examinons quelques-unes des tactiques les plus efficaces.

Fournir une authentification

Si un site Web nécessite une connexion pour accéder au contenu que vous souhaitez supprimer, vous devrez inclure l'authentification dans votre processus de scraping Web. Cela implique généralement deux étapes :

  1. Inspection du processus de connexion: Utilisez les outils de développement de votre navigateur pour observer le trafic réseau lorsque vous vous connectez manuellement au site. Recherchez la requête qui soumet les informations de connexion et notez l'URL, la méthode de requête, les en-têtes et le corps de la requête. Vous devrez reproduire cette demande dans votre scraper Web.

  2. Connexion par programmation: Utilisez une bibliothèque comme Requests de Python ou Axios de Node.js pour envoyer une demande de connexion imitant celle que vous avez observée. Capturez tous les cookies renvoyés par le site, car ceux-ci contiennent souvent des jetons de session nécessaires pour authentifier les demandes ultérieures. Incluez ces cookies dans les en-têtes de vos demandes de web scraping pour maintenir une session de connexion valide.

Voici un exemple de connexion par programmation à un site à l'aide de Python et de Requests :

import requests

# Start a new session
session = requests.Session() 

# Send a POST request to the login URL with the necessary credentials
login_data = {
    ‘username‘: ‘my_username‘,
    ‘password‘: ‘my_password‘,
}
response = session.post(‘https://example.com/login‘, data=login_data)

# The session now contains the cookies needed to authenticate future requests
response = session.get(‘https://example.com/restricted_page‘)

En authentifiant votre web scraper et en incluant les cookies et les en-têtes nécessaires dans vos demandes, vous pouvez éviter les erreurs 403 causées par des autorisations manquantes.

Techniques furtives

Bien entendu, se connecter n’est pas toujours suffisant. Les sites Web sont engagés dans un jeu constant du chat et de la souris avec les web scrapers, à la recherche de signaux permettant de distinguer les robots des utilisateurs humains. Pour éviter d'être bloqués, les web scrapers doivent se fondre dans la masse en imitant le plus fidèlement possible le comportement humain.

Certaines techniques furtives clés incluent :

  • Agents utilisateurs en rotation: L'agent utilisateur est une chaîne qui identifie le client faisant une requête. Utiliser le même agent utilisateur pour toutes les requêtes est un signe évident que le trafic provient d'un bot. Au lieu de cela, conservez un pool de chaînes d’agent utilisateur et sélectionnez-en une différente au hasard pour chaque demande.

  • Rotation des adresses IP: L’envoi d’un volume élevé de requêtes à partir d’une seule adresse IP est un autre signal d’alarme pour les systèmes de détection de robots. Utilisez un service proxy pour acheminer les demandes via diverses adresses IP. Pour de meilleurs résultats, choisissez un fournisseur qui propose un large pool d’adresses IP résidentielles.

  • Randomisation des modèles de requêtes: Les humains ne parcourent pas les sites Web de manière parfaitement régulière. Ils font une pause, changent de page de manière erratique et varient le temps entre les requêtes. Introduisez des délais aléatoires entre vos demandes de web scraping et évitez d’explorer les sites selon un modèle parfaitement prévisible.

  • Gestion des CAPTCHA: Certains sites Web présentent des CAPTCHA lorsqu'ils soupçonnent une activité de robot. Les CAPTCHA peuvent être difficiles à résoudre automatiquement par les web scrapers. Si vous les rencontrez fréquemment, vous devrez peut-être utiliser un service de résolution de CAPTCHA qui utilise des travailleurs humains pour relever les défis au nom de votre scraper.

Voici un exemple de requête plus furtive en Python utilisant un agent utilisateur aléatoire et des délais :

import requests
import random
import time

# List of user agent strings
user_agents = [    
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36‘,  
]

# Randomize user agent 
headers = {‘User-Agent‘: random.choice(user_agents)}

# Introduce a random delay of 1-5 seconds
time.sleep(random.randint(1, 5))

# Send the request
response = requests.get(‘https://example.com‘, headers=headers)

En prenant des mesures pour rendre le trafic de votre web scraper aussi « humain » que possible, vous pouvez réduire considérablement le risque de rencontrer des erreurs 403 et d'autres obstacles.

Automatisation indétectable

Pour le scraping Web le plus furtif possible, vous souhaiterez peut-être utiliser un outil d'automatisation de navigateur complet comme Puppeteer ou Playwright. Ces outils exécutent un véritable navigateur (Chrome ou Firefox) par programmation, vous permettant d'interagir avec des sites Web d'une manière très difficile à distinguer des vrais utilisateurs humains.

Les outils d'automatisation du navigateur peuvent être configurés pour une furtivité maximale. Par exemple, vous pouvez les configurer pour bloquer le code d'empreinte digitale JavaScript, masquer les signes révélateurs d'automatisation dans les objets Navigator et randomiser les dimensions de la fenêtre d'affichage. En contrôlant un vrai navigateur, vous bénéficiez également d'une gestion automatique des cookies, des en-têtes, des redirections et d'autres aspects de HTTP que les bibliothèques de base de web scraping ne gèrent pas pour vous.

L'inconvénient de l'automatisation du navigateur est qu'elle est plus gourmande en ressources et plus lente que l'envoi de simples requêtes HTTP avec une bibliothèque comme Requests ou Axios. Le compromis en termes de performances peut cependant en valoir la peine pour les sites particulièrement agressifs dans le blocage des scrapers.

Voici un exemple simple d'utilisation de Puppeteer dans Node.js pour visiter une page dans Chrome sans interface :

const puppeteer = require(‘puppeteer‘);

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Configure the browser for stealth (omitted for brevity)

  await page.goto(‘https://example.com‘);

  // Scrape data from the page...

  await browser.close();
})();

Avec quelques configurations supplémentaires, des outils comme Puppeteer peuvent constituer un moyen puissant d’automatiser le scraping tout en évitant la détection.

Conclusion

Rencontrer des erreurs 403 est une partie inévitable du web scraping, mais avec la bonne approche, elles ne doivent pas faire dérailler vos projets. En comprenant pourquoi les erreurs 403 se produisent et en prenant des mesures pour éviter de les déclencher (grâce à l'authentification, à des techniques furtives et à une automatisation indétectable), vous pouvez assurer le bon fonctionnement de votre grattoir Web.

L'approche la plus efficace varie en fonction des sites Web spécifiques que vous ciblez. Certains peuvent nécessiter uniquement de simples en-têtes de requête pour éviter les 403, tandis que d'autres peuvent nécessiter une configuration complète d'automatisation du navigateur. La clé est de commencer avec des techniques de base et d’ajouter des couches de furtivité plus sophistiquées si nécessaire en fonction des obstacles que vous rencontrez.

Si le défi en constante évolution consistant à éviter les 403 et autres mesures anti-scraping vous semble intimidant, vous voudrez peut-être envisager d'utiliser une API de web scraping prête à l'emploi plutôt que de créer et de maintenir votre propre infrastructure de scraping. Des services tels que ScrapingBee et ScraperAPI proposent des scrapers testés au combat avec évitement 403 intégré qui peuvent vous faire gagner un temps de développement substantiel.

Que vous choisissiez de lancer votre propre web scraper ou d'utiliser une solution prédéfinie, l'important est de ne pas laisser les erreurs 403 vous empêcher d'obtenir les données dont vous avez besoin. Avec un peu de persévérance et les bons outils dans votre kit, vous pouvez continuer à faire fonctionner votre web scraper face à toute contre-mesure anti-bot. Bon grattage !

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *