Gérer les headers et user-agents pour éviter les blocages
Lors du web scraping ou de l’interaction avec des API, il est fréquent que les serveurs bloquent ou limitent les requêtes en fonction de certains paramètres, comme l’user-agent ou les headers HTTP. Le user-agent est un identifiant envoyé par le navigateur ou l’application, qui indique le type de client effectuant la requête. En utilisant un user-agent valide et en simulant un navigateur courant (par exemple, Chrome ou Firefox), vous pouvez éviter que vos requêtes soient considérées comme provenant d’un bot et être bloquées. Les headers HTTP permettent aussi de personnaliser la requête, en spécifiant des informations comme le type de contenu accepté, les cookies ou l’acceptation de la langue. Pour éviter les blocages, vous pouvez : Changer régulièrement de user-agent pour simuler différentes sources de trafic. Ajouter des headers personnalisés pour rendre les requêtes plus naturelles. Utiliser des techniques comme les délais entre les requêtes ou le rotating des IP pour minimiser le risque de détection.
Fonctions :
-
Utilisation des headers personnalisés
Ajouter des headers personnalisés dans vos requêtes HTTP permet de simuler un comportement plus naturel et d'éviter que votre requête soit perçue comme un "bot". En particulier, l'ajout de l'en-tête User-Agent aide à simuler un navigateur réel.
Attributs :
Paramètre Description User-Agent
Identifie le client qui effectue la requête (par exemple, un navigateur ou un bot). Accept-Language
Spécifie la langue préférée pour la réponse. Accept-Encoding
Déclare les encodages que le client peut accepter, comme la compression. Connection
Gère la connexion, par exemple, maintenir la connexion ouverte. Exemple de code :
import requests # Définir un user-agent personnalisé headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Accept-Language': 'en-US,en;q=0.9', # Optionnel: Spécifie la langue préférée pour la réponse 'Accept-Encoding': 'gzip, deflate, br', # Optionnel: Compression des données 'Connection': 'keep-alive' # Optionnel: Maintien de la connexion ouverte pour plusieurs requêtes } # Faire une requête GET avec les headers url = 'https://www.example.com' response = requests.get(url, headers=headers) # Vérifier le statut de la réponse if response.status_code == 200: print("Requête réussie !") else: print(f"Erreur {response.status_code}")
Explication du code :
Le code envoie une requête HTTP GET au site
https://www.example.com
, en incluant un ensemble de headers HTTP pour imiter un comportement de navigateur standard. Si le statut de la réponse est200
, la requête est considérée comme réussie, sinon un code d'erreur est retourné. Les headers permettent de configurer la langue de la réponse, le type de compression et la gestion de la connexion. -
Rotation des User-Agents
Les sites web peuvent détecter et bloquer les requêtes provenant de l'utilisation répétée d'un même user-agent. Pour éviter cela, il est utile de changer le user-agent à chaque requête ou après quelques requêtes.
Exemple de code :
import requests import random # Liste de différents user-agents user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36 Edge/18.18362' ] # Choisir un user-agent au hasard headers = { 'User-Agent': random.choice(user_agents) } # Faire une requête GET avec un user-agent rotatif url = 'https://www.example.com' response = requests.get(url, headers=headers) # Vérifier le statut de la réponse if response.status_code == 200: print("Requête réussie !") else: print(f"Erreur {response.status_code}")
Explication du code :
Ici, nous avons une liste de plusieurs
user-agents
que le code sélectionne de manière aléatoire à chaque requête. Cela permet de simuler différents utilisateurs et de réduire le risque de blocage par le serveur. Après avoir choisi unuser-agent
aléatoire, nous envoyons une requête GET et vérifions si la réponse est réussie.