Comment changer de User-Agent et rester incognito avec Python 3 et shadow-useragent

Arrêtez de copier le net. Scrapez le.

 

Comment changer de User-Agent et rester incognito avec Python 3 et shadow-useragent

Un User-Agent est une chaîne de caractères qu’un navigateur ou une application envoie à chaque site Web que vous visitez. La chaine de caractères d’un User-Agent standard contient des détails comme le type d’application, le système d’exploitation, le fournisseur de logiciel ou la version logicielle. Les serveurs Web utilisent ces données pour évaluer les capacités de votre ordinateur et optimiser les performances et l’affichage d’une page. Les agents utilisateurs sont envoyés sous la forme d’un en-tête de requête appelé « User-Agent ».

Le User-Agent est en quelque sorte la carte d’identité de votre navigateur, ou de n’importe quel logiciel qui fera une requête vers un serveur.

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0

Par exemple, lorsque je visite cette page https://fr.wikipedia.org/wiki/User_agent avec mon navigateur (Firefox avec Linux), mon User-Agent est le suivant :

Certains sites utiliseront ce User-Agent pour vous identifier et potentiellement bloquer vos requêtes.

Cela arrivera particulièrement si votre User-Agent indique que votre système utilise Linux, système d’exploitation peu utilisé par un utilisateur « classique ». Si vous utilisez le User-Agent par défaut de votre librairie de scraping, par exemple la librairie Requests (python),  le User-Agent sera python-requests/2.22.0, ce qui vous identifiera directement comme un robot, ou un service de requêtes automatisées.

Comment changer de User Agent avec Python 3 ?

Sans utiliser shadow-useragent

Pour remédier à cela, nous avons décidé de créer l’outil shadow-useragent, que vous pouvez utiliser gratuitement et à volonté. Notre lien GitHub juste là : https://github.com/lobstrio/shadow-useragent.

Contrairement aux listes d’User-Agent statiques présentes ça et là sur Internet, notre librairie met régulièrement à jour les User-Agent disponibles, en fonction de ceux utilisés par la communauté. Plus d’User-Agent obsolète ou peu utilisé, vous vous fondez parmi la masse 👻

Essayons de scraper Leboncoin avec le framework Requests, sans modifier le User-Agent.

Voici le header envoyé par défaut par la librairie requests :

Et là, malheureusement, vous allez être bloqué.. La réponses ne contiendra rien à part ce petit bout de code HTML : 

On notera par ailleurs cette mystérieuse adresse mail : dataaccess@datadome.co. Il s’agit en réalité d’une société de bot mitigation, qui travaille avec Leboncoin, pour empêcher les robots malveillants de se déplacer sur le site 🤖

Jusqu’ici, c’est réussi.

En utilisant shadow-useragent

Cette fois-ci, nous allons faire la même requête, avec requests et Python 3 en utilisant shadow-useragent

Voilà maintenant les headers de la requête, avec un User-Agent répandu et pouvant appartenir à un vrai utilisateur. Vous n’êtes plus un robot, vous êtes un honnête utilisateur désormais.

Et là… vous pouvez consulter la réponse sans problème, plus de blocage ! Vous pouvez utiliser cette technique pour d’autres pages de leboncoin.fr, notamment les annonces 😍



AvertissementTout code fourni dans nos tutoriels est destiné à des fins d’illustration et d’apprentissage uniquement. Nous ne sommes pas responsables de la façon dont il est utilisé et n’assumons aucune responsabilité pour toute utilisation préjudiciable du code source. La simple présence de ce code sur notre site n’implique pas que nous encourageons le scraping ou l’extraction de données des sites référencés dans le code et le tutoriel qui l’accompagne. Les tutoriels ne font qu’illustrer la technique de programmation des scrapers web pour les sites internet populaires. Nous ne sommes pas obligés de fournir un support pour le code, cependant, si vous ajoutez vos questions dans la section des commentaires, nous pouvons vous y répondre périodiquement.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *