Guide des agents utilisateurs Python Requests : configuration et modification

Arrêtez de vous faire bloquer par les systèmes anti-bots ! Ce didacticiel vous apprend à définir et à provoquer la rotation de l’en-tête User-Agent dans Python Requests pour un web scraping sûr et efficace.
11 min de lecture
Requests User Agent Guide blog image

Dans ce tutoriel, vous allez apprendre :

  • Pourquoi devez-vous définir l’en-tête de l’agent utilisateur
  • L’agent utilisateur Python requests par défaut
  • Comment modifier et supprimer l’agent utilisateur dans Requests
  • Comment implémenter la rotation des agents utilisateurs en Python

C’est parti !

Pourquoi devriez-vous toujours définir l’en-tête de l’agent utilisateur

L’en-tête HTTP User-Agent est défini par les navigateurs, les applications effectuant des requêtes Web et les clients HTTP pour identifier le logiciel client à l’origine de la demande. Cette valeur inclut généralement des informations sur le type de navigateur ou d’application, le système d’exploitation et l’architecture d’où provient la demande.

Par exemple, voici l’agent utilisateur défini par Chrome au moment de la rédaction de cet article lors de la visite de pages Web :

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36

Les composants de cet agent utilisateur sont les suivants :

  • Mozilla/5.0 : historiquement utilisé pour indiquer la compatibilité avec les navigateurs Mozilla. Il s’agit désormais d’un préfixe courant ajouté aux agents utilisateurs pour des raisons de compatibilité.
  • Windows NT 10.0; Win64; x64 : système d’exploitation (Windows NT 10.0), plateforme (Win64) et architecture (x64).
  • AppleWebKit/537.36 : moteur de navigateur utilisé par la version de Chrome à l’origine de la requête.
  • KHTML, comme Gecko : compatibilité avec le moteur KHTML et le moteur de mise en page Gecko utilisés par Mozilla.
  1. Chrome/125.0.0.0 : nom et version du navigateur.
  2. Safari/537.36 : compatibilité avec Safari.

En résumé, l’agent utilisateur est essentiel pour déterminer si une demande provient d’un navigateur connu ou d’un autre type de logiciel.

Les bots de scraping ont tendance à utiliser des chaînes d’agents utilisateurs par défaut ou incohérentes, ce qui révèle leur nature automatisée. Par conséquent, les solutions anti-scraping protègent les données des pages Web en examinant l’en-tête User-Agent pour déterminer si l’utilisateur actuel est légitime ou s’il s’agit d’un bot.

Pour en savoir plus, consultez notre guide sur les agents utilisateurs pour le web scraping

Qu’est-ce que l’agent utilisateur Python Requests par défaut ?

Comme la plupart des clients HTTP, Requests définit un en-tête User-Agent lors des requêtes HTTP. En particulier, l’agent utilisateur par défaut défini par requests suit le format ci-dessous :

python-requests/X.Y.Z

X.Y.Z est la version du package requests installé dans votre projet. 

Vérifiez que la chaîne ci-dessus est bien l’agent utilisateur Requests en envoyant une requête GET à l’endpoint httpbin.io /user-agent. Cette API renvoie l’en-tête User-Agent lu à partir de la requête entrante. En d’autres termes, il vous permet de vérifier l’agent utilisateur défini automatiquement par un client HTTP.

Importez requests et utilisez sa méthode get() pour exécuter la requête HTTP souhaitée :

import requests

# make an HTTP GET request to the specified URL

response = requests.get('https://httpbin.io/user-agent')

# parse the API response as JSON and print it

print(response.json())

Exécutez l’extrait Python ci-dessus et vous obtiendrez quelque chose comme ceci :

{'user-agent': 'python-requests/2.32.3'}

L’agent utilisateur est python-requests/2.32.3, qui identifie clairement la requête comme provenant de la bibliothèque requests. Par conséquent, des systèmes anti-bot peuvent marquer une telle requête comme ne provenant pas d’un utilisateur humain et la bloquer immédiatement. Voici pourquoi il est si important de modifier la valeur de l’agent utilisateur Python Requests !

Pour plus d’informations, consultez notre guide complet sur la bibliothèque Python Requests.

Comment modifier l’agent utilisateur Python Requests

Voyons comment modifier et annuler la valeur de l’en-tête User-Agent dans Requests !

Définir un agent utilisateur personnalisé

Requests ne fournit pas d’option directe pour définir la valeur de l’agent utilisateur. Dans le même temps, User-Agent n’est rien d’autre qu’un en-tête HTTP. Vous pouvez donc personnaliser sa valeur comme n’importe quel autre en-tête HTTP en utilisant l’option headers comme ci-dessous :

import requests

# custom user agent header

headers = {

  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'

}

# make an HTTP GET request to the specified URL

# setting custom headers

response = requests.get('https://httpbin.io/user-agent', headers=headers)

# parse the API response as JSON and print it

print(response.json())

Exécutez l’extrait Python à nouveau, et cette fois, il affichera :

{'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'}

Parfait ! Vous venez d’apprendre que pour définir un agent utilisateur Python Requests personnalisé, vous devez :

  1. Définir un dictionnaire Python avec une propriété user-agent.
  2. Transmettre le dictionnaire au paramètre headers de la méthode requests que vous utilisez pour effectuer la requête HTTP.

N’oubliez pas que les noms d’en-têtes HTTP ne font pas la distinction entre majuscules et minuscules. Les noms de propriétés du dictionnaire d’en-têtes peuvent donc avoir le format que vous préférez.

Remarque : cette approche fonctionne également avec request(), post(), patch(), put(), delete() et head().

Pour définir un agent utilisateur global requests, vous devez configurer une session HTTP personnalisée comme suit :

import requests

# initialize an HTTP session

session = requests.Session()

# set a custom header in the session

session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'

# perform a GET request within the HTTP session

response = session.get('https://httpbin.io/user-agent')

# print the data returned by the API

print(response.json())

# other requests with a custom user agent within the session ...

Cela produira le même résultat que précédemment. Si vous n’êtes pas familier avec les sessions HTTP dans Requests, consultez la documentation.

Désactiver l’agent utilisateur

Effectuer des requêtes HTTP sans paramétrer l’agent utilisateur est une mauvaise pratique qui peut facilement déclencher des solutions anti-bot. Cependant, il peut arriver que vous deviez supprimer l’en-tête User-Agent

La première approche pour annuler la configuration de l’agent utilisateur dans les requêtes que vous pourriez imaginer est de définir l’en-tête User-Agent sur None :

import requests

# custom user agent header

headers = {

  'user-agent': None

}

# make an HTTP GET request to the specified URL

# setting custom headers

response = requests.get('https://httpbin.io/user-agent', headers=headers)

# parse the API response as JSON and print it

print(response.json())

Cela ne fonctionnera pas, car requests utilise urllib3 en arrière-plan. Ainsi, la valeur par défaut de l’agent utilisateur urllib3 sera utilisée :

python-urllib3/2.2.1

Dans le détail, l’endpoint /user-agent renverra quelque chose comme :

{'user-agent': 'python-urllib3/2.2.1'}

Vous devez plutôt configurer urllib3 pour ignorer la valeur par défaut de l’agent utilisateur en utilisant urllib3.util.SKIP_HEADER. Vérifiez que l’agent utilisateur n’a pas été configuré en ciblant l’endpoint /headers depuis httpbin.io, qui renvoie les en-têtes HTTP de la requête entrante :

import requests

import urllib3

# exclude the default user agent value

headers = { 

  'user-agent': urllib3.util.SKIP_HEADER 

}

# prepare the HTTP request to make

req = requests.Request('GET', 'https://httpbin.io/headers')

prepared_request = req.prepare()

# set the custom headers with no user agent

prepared_request.headers = headers

# create a requests session and perform

# the request

session = requests.Session()

response = session.send(prepared_request)

# print the returned data

print(response.json())

Exécutez le code Python ci-dessus et le résultat sera :

{'headers': {'Accept-Encoding': ['identity'], 'Host': ['httpbin.io']}}

Excellent, n’est-ce pas ? Comme prévu, aucun agent utilisateur n’est demandé par Python. 

Implémenter la rotation des agents utilisateurs dans Requests

Remplacer l’en-tête par défaut User-Agent par une valeur correcte à partir d’un navigateur réel peut ne pas suffire. Si vous faites trop de requêtes depuis la même adresse IP en utilisant le même agent utilisateur, cela peut susciter des soupçons de la part des technologies anti-bot. Ces systèmes surveillent toutes les requêtes entrantes, sachant que les requêtes automatisées suivent généralement des modèles réguliers. 

Pour éviter la détection des bots, il est essentiel de rendre vos requêtes aléatoires. Un bon moyen de rendre chaque requête différente des autres est la rotation des agents utilisateurs. L’idée qui sous-tend cette technique est de continuer à modifier l’en-tête de l’agent utilisateur utilisé par le client HTTP. De cette façon, vous pouvez faire apparaître vos requêtes automatisées comme provenant de différents navigateurs, réduisant ainsi le risque de blocage ou de bannissement temporaire.

À présent, suivez les étapes ci-dessous pour implémenter la rotation des agents utilisateurs dans Requests !

Étape #1 : récupérez une liste d’agents utilisateurs valides

Rassemblez une liste des agents utilisateurs appropriés à partir d’un site tel que User Agent String.com et stockez-la dans un tableau Python :

user_agents = [

    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",

    "Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0",

    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0"

    # other user agents...

]

Étape #2 : extrayez un agent utilisateur aléatoire

Extrait de manière aléatoire une chaîne d’agent utilisateur du tableau en utilisant random.choice() :

random_user_agent = random.choice(user_agents)

N’oubliez pas que la ligne ci-dessus nécessite l’importation suivante :

import random

Étape #3 : définissez l’agent utilisateur aléatoire et effectuez la requête HTTP

Définissez le dictionnaire d’en-têtes avec l’agent utilisateur aléatoire et utilisez-le dans la requête requests :

headers = {

  'user-agent': random_user_agent

}

response = requests.get('https://httpbin.io/user-agent', headers=headers)

print(response.json())

Ces instructions nécessitent cette importation :

import requests

Étape #4 : pour terminer 

Voici à quoi ressemblera la logique de rotation de votre agent utilisateur Python Requests :

import random

import requests

# list of user agents

user_agents = [

    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",

    "Mozilla/5.0 (Macintosh; Intel Mac OS X 14.5; rv:126.0) Gecko/20100101 Firefox/126.0",

    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0"

    # other user agents...

]

# pick a random user agent from the list

random_user_agent = random.choice(user_agents)

# set the random user agent

headers = {

  'user-agent': random_user_agent

}

# perform a GET request to the specified URL

# and print the response data

response = requests.get('https://httpbin.io/user-agent', headers=headers)

print(response.json())

Exécutez ce script plusieurs fois et vous obtiendrez différentes chaînes d’agent utilisateur.

Et voilà ! Vous êtes désormais passé maître dans la définition des valeurs des agents utilisateurs Requests Python.

Conclusion

Dans ce guide, vous avez appris l’importance de définir l’en-tête User-Agent et comment le faire dans requests. De cette façon, vous pouvez tromper les systèmes anti-bots de base en leur faisant croire que vos requêtes proviennent de navigateurs légitimes. Cependant, des solutions avancées peuvent toujours être en mesure de vous détecter et de vous bloquer. Pour éviter les interdictions d’adresses IP, vous pourriez utiliser un proxy avec requests, mais même cela ne suffira peut-être pas !

Évitez ces complications avec l’API Web Scraper. Cette API de scraping de nouvelle génération fournit tout ce dont vous avez besoin pour effectuer des requêtes Web automatisées à l’aide de requests ou de tout autre client HTTP. Il contourne sans effort les technologies anti-bot pour vous, en s’appuyant sur des fonctionnalités telles que la rotation des adresses IP et des agents utilisateurs. Réaliser des requêtes automatisées réussies n’a jamais été aussi simple !

Discutez de nos solutions de scraping avec l’un de nos experts en données ou explorez simplement tous les produits disponibles en vous inscrivant dès maintenant. Essais gratuits disponibles !

Aucune carte de crédit requise