Le grattage est une pratique courante dans la programmation récente et l’ère technologique rapide. Beaucoup d’entre nous utilisent le grattage pour leurs tâches quotidiennes habituelles de programmation.
Mais avez-vous rencontré un cas où vous utilisez des requêtes ou des wgets pour accéder à une page web et obtenir un contenu HTML complètement différent ?
Oui, vous n’êtes pas le seul à être confronté à ce problème. Certains développeurs sont assez avisés pour sauvegarder leurs précieuses données à partir d’un tel crawler ou scraper.
Mais vous êtes-vous demandé comment il est possible de faire une différence intelligente entre une requête de navigateur normale et une requête python automatisée.
Dans ce blog, nous allons voir comment cela se passe et comment écrire une solution intelligente mais facile pour un tel problème en utilisant seulement quelques lignes de code dans votre langage de programmation favori “Python”.
Dans ce blog, nous couvrirons chaque aspect de l’User-Agent. Ce blog est divisé en plusieurs parties :
- Qu’est-ce qu’un User-Agent ?
- Description d’un User-Agent
- Pourquoi avons-nous besoin d’un User Agent ?
- Étapes de la rotation d’un User-Agent
Qu’est-ce qu’un User Agent ?
Un User Agent n’est rien d’autre qu’un simple ensemble de chaînes de caractères que toute application ou tout navigateur envoie pour accéder à la page web.
La question se pose donc maintenant de savoir ce que sont fondamentalement ces chaînes qui aident le serveur à faire la différence entre un navigateur et un script python.
Les composants d’un user-agent typique sont les suivants
- le système d’exploitation
- type de demande
- la version du logiciel, ou
- vendeur de logiciels de l’agent utilisateur de logiciels demandeur.
La question se pose maintenant : “Pourquoi faut-il des informations telles que le système d’exploitation et les versions des logiciels ?
La réponse est assez simple : pour optimiser la page web en fonction de votre matériel et de vos logiciels.
Voyons un exemple de User-agent. Nous allons voir le navigateur préféré d’un développeur de logiciels libres, Mozilla Firefox.
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTM, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Répartition d’un User-Agent :
Dans l’exemple ci-dessus, il y a tous les détails dont nous avons parlé précédemment dans cet article. Voyons maintenant quelle est la partie qui lui est associée.
<browser>/<version> - Mozilla/5.0 (<system information>) - (X11; Linux x86_64) <platform> - AppleWebKit/537.36 (<platform-details>) - (KHTM, like Gecko) <extensions> - Chrome/51.0.2704.103 Safari/537.36
Voyons maintenant en quoi une requête de page web normale utilisant des bibliothèques python standard telles que “requests” et “wget” diffère d’une requête de navigateur. Nous allons considérer les “requêtes” pour cet exemple.
import requests from pprint import pprint # using HTTPBin to get the header for our requests r = requests.get('http://httpbin.org/headers') pprint(r.json())
Pourquoi avons-nous besoin d’un User Agent ?
Comme nous pouvons le voir dans la réponse elle-même, l’agent utilisateur est “python-requests/2.24.0“. C’est donc ainsi qu’un serveur peut reconnaître la différence entre une requête de navigateur normale et des requêtes python(). Voyons maintenant comment nous pouvons modifier cet agent utilisateur et le remplacer par un agent utilisateur pour navigateur utilisant Python.
Maintenant, si vous avez observé la réponse que nous avons reçue, elle a un dictionnaire et la clé de celui-ci est “headers“. Nous devons maintenant faire correspondre notre user-agent aux requêtes python.
Pour notre exemple, nous allons prendre le user-agent de l’exemple ci-dessus en utilisant les requêtes.
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTM, like Gecko) Chrome/51.0.2704.103 Safari/537.36 '} r = requests.get('http://httpbin.org/headers', headers=headers) pprint(r.json())
En utilisant le code ci-dessus, nous obtiendrons un résultat similaire à une requête de navigateur “User-Agent” comme nous pouvons également le voir dans l’image ci-dessous, mais n’oubliez pas qu’il n’est pas exactement similaire car certains composants sont encore manquants.
Examinons une requête de navigateur réelle.
{ "headers": { "Accept": "text/html.application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng*/*;q=0.8,application/signed-exchage;v=b3'q=0.9", "Accept-Encoding": "gzip, deflate", "Accept-Language": 'en-GB,en-US;q=0.9,en;q=0.9", "Dnt": "1", "Host": "httpbin.org", "Upgrade-Insecure-Requests": "1", "user-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTM, like Gecko) Chrome/51.0.2704.103 Safari/537.36", "X-Amzn-Track-Id": "Root=1-5ee7bae0-82260c065baf5d7f0533e5" } }
Maintenant que nous avons trouvé d’autres éléments à ajouter dans notre en-tête pour rendre notre User-Agent infaillible et notre en-tête tels que Accept-Language, Dnt, Upgrade-Insecure-Requests.
Nous devrions donc modifier un peu plus l’en-tête pour cela.
headers = { "Accept": "text/html.application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng*/*;q=0.8,application/signed-exchage;v=b3'q=0.9", "Accept-Encoding": "gzip, deflate", "Accept-Language": 'en-GB,en-US;q=0.9,en;q=0.9", "Dnt": "1", "Host": "httpbin.org", "Upgrade-Insecure-Requests": "1", "user-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTM, like Gecko) Chrome/51.0.2704.103 Safari/537.36" } r = requests.get('http://httpbin.org/headers', headers=headers) pprint(r.json())
Maintenant, comme nous pouvons le voir dans la réponse ci-dessous, le résultat est le même que celui d’un navigateur.
Un soupir de soulagement, vous pouvez maintenant commencer à gratter sans vous soucier de bloquer votre adresse IP !
Eh bien, ce n’est pas tout à fait terminé, vous en avez déjà fait la moitié.
browser user agent sampleIl y a certaines choses dont il faut s’occuper avant de pouvoir s’asseoir et se détendre, et c’est la rotation utilisateur-agent.
Ce n’est rien d’autre qu’un ensemble d’en-têtes expliqués juste au-dessus, de sorte qu’il peut en choisir un au hasard et procéder sans faire de demandes avec le même en-tête et se faire bloquer.
Étapes de la rotation des User-Agents :
Maintenant, si votre objectif est simplement de faire tourner les agents utilisateurs, discutons de la manière dont nous pouvons le mettre en œuvre en suivant les étapes ci-dessous. Le processus est très simple.
- Vous pouvez obtenir une liste des agents utilisateurs récents en accédant à la page web suivante WhatIsMyBrowser.com.
- Enregistrez-les dans une liste Python.
- Ecrivez une boucle pour choisir un User-Agent aléatoire de la liste pour votre usage.
import requests import random user_agent_list = [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:77.0) Gecko/20100101 Firefox/77.0', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36', ] url = 'https://httpbin.org/headers' for i in range(1,4): # Pick a random user agent user_agent = random.choice(user_agent_list) # Set the headers headers = {'User-Agent': user_agent} # Make the request response = requests.get(url,headers=headers) print("Request #%d\nUser-Agent Sent:%s\n\nHeaders Recevied by HTTPBin:"%(i,user_agent)) print(response.json()) print("-------------------")
C’est tout ce qu’il fallait faire pour mettre en œuvre la rotation User-Agent en utilisant Python. Vous trouverez ci-dessous la sortie du code ci-dessus.
Félicitations, vous avez réussi à faire pivoter l’agent utilisateur pour un raclage sans faille, mais certains sites web disposent d’un mécanisme anti-raclage strict qui peut éventuellement détecter ce modèle également.
Bien que ce procédé puisse être utilisé, il est beaucoup plus fastidieux que vous ne pouvez l’imaginer. Nous vous suggérons d’utiliser certains outils pour une expérience sans tracas.
ScrapingPass est l’un des meilleurs fournisseurs de services de grattage disponibles aujourd’hui, offrant une gamme de services différents à des prix extrêmement abordables.
Vivek
More posts by Vivek