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.
Chrome/125.0.0.0
: nom et version du navigateur.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
Où 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 :
- Définir un dictionnaire Python avec une propriété
user-agent
. - Transmettre le dictionnaire au paramètre
headers
de la méthoderequests
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