En-têtes HTTP 101 : Comment les utiliser pour un Web Scraping efficace

Raluca Penciuc le 03 février 2023

blog-image


Le web scraping est un outil incroyable pour extraire des informations précieuses de l'internet, mais soyons réalistes, il peut être assez frustrant lorsque vos scripts de scraping sont bloqués.

C'est un peu le jeu du chat et de la souris, les propriétaires de sites web trouvant toujours de nouveaux moyens de vous empêcher d'entrer. Mais il existe une arme secrète dans votre boîte à outils qui peut vous donner l'avantage : Les en-têtes HTTP et les cookies.

Ces deux éléments jouent un rôle essentiel dans la manière dont vos scripts de scraping interagissent avec les sites web, et leur maîtrise peut faire la différence entre un scrape bloqué et un scrape réussi.

Dans ce tutoriel, nous allons découvrir les secrets des en-têtes HTTP et des cookies et vous montrer comment les utiliser pour rendre vos efforts de scraping aussi humains que possible.

Vous découvrirez les en-têtes les plus courants utilisés dans le web scraping, comment récupérer les en-têtes et les cookies d'un vrai navigateur, et comment utiliser des en-têtes personnalisés pour contourner les mesures de sécurité. Alors, plongeons dans le vif du sujet et voyons comment nous pouvons faire passer notre jeu de scraping au niveau supérieur !

Comprendre les en-têtes HTTP

Les en-têtes HTTP sont des paires clé-valeur que vous envoyez dans le cadre d'une requête ou d'une réponse HTTP. Ils sont séparés par deux points et un espace et leurs noms (clés) sont insensibles à la casse.

Vous pouvez regrouper les en-têtes HTTP en différentes catégories, selon leur fonction et la direction dans laquelle vous les envoyez. Ces catégories sont les suivantes

  • les en-têtes généraux : ils s'appliquent à la fois aux messages de demande et de réponse
  • les en-têtes de requête : ils contiennent des informations supplémentaires sur la ressource que vous souhaitez récupérer ou sur le client qui effectue la requête
  • les en-têtes de réponse : ils contiennent des informations supplémentaires sur la réponse, telles que son emplacement ou le serveur qui la fournit
  • les en-têtes de l'entité : ils contiennent des informations sur le corps de la ressource, telles que sa taille ou son type MIME
  • les en-têtes d'extension : utilisés pour assurer la compatibilité ascendante

Les en-têtes HTTP fournissent un large éventail d'informations, notamment le type de demande que vous faites, le navigateur que vous utilisez et toute information supplémentaire dont le serveur a besoin pour traiter la demande.

Ils vous permettent également de fournir des informations d'authentification et de sécurité, de contrôler la mise en cache et la compression, et de spécifier la langue et le jeu de caractères de la requête.

Par exemple, voici les en-têtes que Chrome envoie lorsqu'il accède à youtube.com :

:authority: www.youtube.com

:method: GET

:path: /

:scheme: https

accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

accept-encoding: gzip, deflate, br

accept-language: en-US,en;q=0.9

cache-control: no-cache

pragma: no-cache

referer: https://www.google.com/

sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"

sec-ch-ua-arch: "x86"

sec-ch-ua-bitness: "64"

sec-ch-ua-full-version: "109.0.5414.75"

sec-ch-ua-full-version-list: "Not_A Brand";v="99.0.0.0", "Google Chrome";v="109.0.5414.75", "Chromium";v="109.0.5414.75"

sec-ch-ua-mobile: ?0

sec-ch-ua-model: ""

sec-ch-ua-platform: "Windows"

sec-ch-ua-platform-version: "15.0.0"

sec-ch-ua-wow64: ?0

sec-fetch-dest: document

sec-fetch-mode: navigate

sec-fetch-site: same-origin

sec-fetch-user: ?1

upgrade-insecure-requests: 1

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

x-client-data: CIm2yQEIorbJAQjEtskBCKmdygEI5PDKAQiWocsBCKr2zAEI7oLNAQibiM0BCLqIzQEI9YjNAQ==

Decoded:

message ClientVariations {

// Active client experiment variation IDs.

repeated int32 variation_id = [3300105, 3300130, 3300164, 3313321, 3324004, 3330198, 3357482, 3359086, 3359771, 3359802, 3359861];

}

Comprendre les cookies

Les cookies web, ou cookies HTTP, sont de petits fichiers texte qu'un site web stocke sur le navigateur de l'utilisateur. Ensuite, chaque fois que l'utilisateur envoie une nouvelle demande au site web, les cookies sont inclus automatiquement.

Ils sont identifiables de manière unique, et vous pouvez les trouver sous la forme suivante :

  • les cookies de session : ils sont temporaires et expirent lorsque l'utilisateur ferme le navigateur
  • les cookies persistants : ils ont une date d'expiration spécifique et restent sur l'appareil de l'utilisateur jusqu'à ce qu'ils expirent ou soient supprimés par l'utilisateur.

Les sites web utilisent des cookies pour personnaliser l'expérience de l'utilisateur. Il peut s'agir de se souvenir de leurs informations de connexion et de stocker le contenu de leur panier d'achat afin de comprendre comment les utilisateurs interagissent avec le site web et de leur proposer des publicités ciblées.

Si l'on prend l'exemple de youtube.com, on peut remarquer ce que les cookies stockent :

cookie : CONSENT=YES+srp.gws-20210816-0-RC3.ro+FX+801 ; __Secure-3PAPISID=jG4abs_wYhyzcDG5/A2yfWlePlb1U9fglf ; VISITOR_INFO1_LIVE=pJuwGIYiJlE ; __Secure-3PSIDCC=AEf-XMRV_MjLL0AWdGWngxFHvNUF3OIpk3_jdeUwRiZ76WZ3XsSY0Vlsl1jM9n7FLprKTqFzvw ; __Secure-3PSID=RAi8PYLbf3qLvF1oEav9BnHK_eOXwimNM-0xwTQPj1-QVG1Xwpz17T4d-EGzT6sVps1PjQ.; YSC=4M3JgZEwyiA ; GPS=1 ; DEVICE_INFO=ChxOekU1TURJMk1URTBOemd5TWpJeU5qVTJOdz09EOvgo54GGOvgo54G ; PREF=tz=Europe.Bucharest&f6=40000000&f4=4000000 ; CONSISTENCY=ACHmjUr7DnoYSMf5OL-vaunKYfoLGz1lWYRUZRepFyIBDRpp_jrEa85E4wgRJLJ2j15l688hk9IVQu7fIjYo7sdsZamArxVHTMuChgHd22PkX_mbfifnMjyp4OX2swyQJRS-8PE6cOCt_6129fGyBs ; amp_adc4c4=Ncu7lbhgeiAAYqecSmyAsS.MXVDWTJd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn4emd4v.1gn4en556.0.4.4

L'importance des en-têtes et des cookies dans le web scraping

Dans le cadre du web scraping, vous pouvez utiliser des en-têtes et des cookies pour contourner les mesures de sécurité et accéder à des contenus restreints, ainsi que pour fournir des informations permettant d'identifier votre script de scraping comme étant un navigateur légitime.

Par exemple, en spécifiant le bon en-tête User-Agent (plus de détails dans la section suivante), vous pouvez faire en sorte que votre script apparaisse comme s'il s'agissait d'un navigateur Chrome, ce qui peut vous aider à éviter d'être détecté par le site web.

En outre, en stockant et en envoyant des cookies, votre scraper peut accéder à un contenu qui n'est disponible que pour les utilisateurs connectés. Comme le site web utilise des cookies pour fournir de la publicité ciblée, vous pouvez également les utiliser pour extraire des données plus précises et mieux comprendre le site web.

En plus de jouer avec les en-têtes HTTP et les cookies, prenez en compte les meilleures pratiques de web scraping énumérées dans ce guide.

En-têtes courants utilisés dans le web scraping

Il existe de nombreux en-têtes différents qui peuvent être utilisés dans le cadre du web scraping, mais les plus courants sont les suivants :

User-Agent

Il sert à identifier le navigateur et le système d'exploitation utilisés par le client qui fait la demande. Ces informations sont utilisées par les serveurs pour déterminer le navigateur et le système d'exploitation utilisés par le client afin de lui fournir le contenu et les fonctionnalités appropriés.

La chaîne User-Agent contient des informations telles que le nom du navigateur, la version et la plateforme. Par exemple, une chaîne User-Agent pour Google Chrome sur Windows pourrait ressembler à ceci :

User-Agent : Mozilla/5.0 (Windows NT 10.0 ; Win64 ; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/109.0.0.0 Safari/537.36

Dans le cadre du web scraping, en spécifiant un User-Agent appartenant à un navigateur web courant, vous pouvez faire en sorte que votre script apparaisse comme un navigateur couramment utilisé par des utilisateurs légitimes, ce qui réduit les risques de blocage.

Accepter

Il est utilisé pour spécifier les types de contenu que le navigateur est prêt à accepter en réponse à une requête HTTP, tels que le texte, les images, l'audio ou la vidéo. Un en-tête Accept peut se présenter comme suit :

Accept : 
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8

Dans le cadre du web scraping, en spécifiant l'en-tête Accept correct, vous pouvez vous assurer que votre script reçoit les données correctes. Par exemple, si vous souhaitez récupérer une page HTML, vous pouvez spécifier que l'en-tête Accept est text/html.

Cependant, certains sites web peuvent utiliser cet en-tête pour détecter les "scrapers", il est donc important de l'utiliser avec précaution et uniquement lorsque c'est nécessaire.

Acceptation de la langue

Cet en-tête spécifie la langue préférée du contenu que le navigateur est prêt à accepter en réponse à une requête HTTP. L'en-tête Accept-Language est utilisé par les serveurs pour déterminer la langue à envoyer au client.

Un navigateur qui demande une page HTML en anglais peut envoyer un en-tête Accept-Language qui ressemble à ceci :

Accept-Language : en-US,en;q=0.9

Cookie

Les sites web utilisent cet en-tête pour envoyer des cookies à un client après une requête. Un en-tête Cookie peut ressembler à ceci :

Cookie : session_id=1234567890 ; user_id=johndoe

Dans le cadre du web scraping, vous pouvez utiliser cet en-tête pour transmettre des cookies de session et accéder au contenu qui n'est disponible que pour les utilisateurs connectés. Un autre cas d'utilisation serait d'utiliser des cookies persistants pour obtenir des résultats personnalisés.

Référent

Cet en-tête spécifie l'URL de la page web précédente à partir de laquelle un lien vers la page actuelle a été suivi. Il est utilisé par les serveurs pour déterminer l'origine de la demande et en comprendre le contexte.

Par exemple, si un utilisateur clique sur un lien d'une page web vers une autre page web, le navigateur envoie une requête à la deuxième page web avec l'URL de la première page web dans l'en-tête Referer. La demande adressée à la deuxième page web aurait donc un en-tête Referer qui ressemblerait à ceci :

Référent : https://www.example.com/

Dans le cadre du web scraping, vous pouvez utiliser l'en-tête Referer pour accéder à des sites web qui n'autorisent pas les requêtes directes.

Récupérer les en-têtes et les cookies d'un vrai navigateur

Mais assez de théorie. Voyons comment extraire les en-têtes HTTP et les cookies envoyés à un site web.

Pour en revenir à notre exemple, rendez-vous sur le site youtube.com dans votre navigateur réel. Cliquez avec le bouton droit de la souris n'importe où sur la page et choisissez l'option "Inspecter". Lorsque les outils de développement s'ouvrent, cliquez sur l'onglet "Réseau".

blog-image

Après avoir actualisé la page, vous devriez voir les demandes se charger en temps réel. Cliquez sur la première (et principale) demande, et un onglet supplémentaire apparaîtra.

blog-image

Vous pouvez y voir tous les détails de la requête que vous avez envoyée : URL, méthode, code d'état, adresse distante et, surtout, les en-têtes de requête et de réponse que nous recherchons.

Utilisation d'en-têtes personnalisés dans le web scraping

  • utiliser httpbin.org pour afficher les en-têtes envoyés par un navigateur
  • choisir un langage de programmation et envoyer une requête GET de base pour voir les en-têtes
  • transmettre les en-têtes personnalisés que vous avez saisis
  • répéter le processus pour node.js et python
  • réécrire la section pour WSA
    - lien vers la documentation de l'API
    - décrire la fonctionnalité des en-têtes personnalisés

Voyons maintenant comment nous pouvons utiliser ces en-têtes pour améliorer nos scrapers. Pour cette partie, nous prendrons comme exemple un simple site web miroir, qui nous montrera directement les en-têtes que nous envoyons : https://httpbin.org/headers.

blog-image

Copiez le contenu de l'objet "headers" et commençons à écrire le code.

Node.js

Après vous être assuré que votre environnement Node.js est correctement configuré et que votre projet est initialisé, exécutez le code suivant :

import got from 'got';

(async () => {

const response = await got('https://httpbin.org/headers')

console.log(response.body)

})()

De cette façon, nous pouvons voir à quoi ressemble la requête GET la plus basique. Le résultat devrait être :

{

"headers": {

"Accept-Encoding": "gzip, deflate, br",

"Host": "httpbin.org",

"User-Agent": "got (https://github.com/sindresorhus/got)",

"X-Amzn-Trace-Id": "Root=1-63c93ff5-0c352d6319620b3d6b46df02"

}

}

Cela semble très différent de ce que nous avons vu dans notre navigateur. Le User-Agent à lui seul permet à un serveur de détecter facilement que la requête est automatisée.

Passons maintenant nos en-têtes personnalisés et envoyons à nouveau la requête :

import got from 'got';

(async () => {

const custom_headers = {

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",

"Accept-Encoding": "gzip, deflate, br",

"Accept-Language": "en-US,en;q=0.9",

"Cache-Control": "no-cache",

"Cookie": "amp_d915a9=sd12OA1w0P4xMKsMYSmY9n.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1ggrl757h.1ggrl75ci.0.1o.1o; amp_adc4c4=P3ZIfUgU8qzSHI-y0gZvbk.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn51hk3v.1gn51lql7.0.e.e",

"Host": "httpbin.org",

"Pragma": "no-cache",

"Sec-Ch-Ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",

"Sec-Ch-Ua-Mobile": "?0",

"Sec-Ch-Ua-Platform": "\"Windows\"",

"Sec-Fetch-Dest": "document",

"Sec-Fetch-Mode": "navigate",

"Sec-Fetch-Site": "none",

"Sec-Fetch-User": "?1",

"Upgrade-Insecure-Requests": "1",

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",

"X-Amzn-Trace-Id": "Root=1-63c93e34-1ad0141279d49bfc28fb058e"

}

const response = await got('https://httpbin.org/headers', {

headers: custom_headers

})

console.log(response.body)

})()

En réexécutant le script, vous devriez remarquer que notre requête semble maintenant être envoyée depuis un véritable navigateur Chrome, même si nous n'en avons pas ouvert un.

Python

Essayons maintenant la même chose en Python. Même si la syntaxe et les bibliothèques sont différentes, le principe est le même.

import requests

url = 'https://httpbin.org/headers'

headers = {

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",

"Accept-Encoding": "gzip, deflate, br",

"Accept-Language": "en-US,en;q=0.9",

"Cache-Control": "no-cache",

"Cookie": "amp_d915a9=sd12OA1w0P4xMKsMYSmY9n.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1ggrl757h.1ggrl75ci.0.1o.1o; amp_adc4c4=P3ZIfUgU8qzSHI-y0gZvbk.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn51hk3v.1gn51lql7.0.e.e",

"Host": "httpbin.org",

"Pragma": "no-cache",

"Sec-Ch-Ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",

"Sec-Ch-Ua-Mobile": "?0",

"Sec-Ch-Ua-Platform": "\"Windows\"",

"Sec-Fetch-Dest": "document",

"Sec-Fetch-Mode": "navigate",

"Sec-Fetch-Site": "none",

"Sec-Fetch-User": "?1",

"Upgrade-Insecure-Requests": "1",

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",

"X-Amzn-Trace-Id": "Root=1-63c93e34-1ad0141279d49bfc28fb058e"

}

response = requests.get(url, headers=headers)

print(response.text)

Le résultat de l'exécution du script sera identique quel que soit le langage de programmation utilisé.

En-têtes personnalisés dans WebScrapingAPI

Toute API de scraping digne de ce nom devrait offrir la possibilité de transmettre des en-têtes HTTP et des cookies personnalisés à une requête. La norme peut varier en fonction de l'API, c'est pourquoi il convient de toujours consulter la documentation officielle en premier lieu.

Par défaut, WebScrapingAPI fournit un ensemble d'en-têtes personnalisés avec chaque requête. Les en-têtes User-Agent aléatoires ne sont qu'un exemple parmi d'autres.

Cependant, comme les sites web peuvent devenir très complexes ou simplement obsolètes, vous avez la liberté de désactiver ce comportement et de personnaliser entièrement votre requête. Assurez-vous simplement d'obtenir d'abord une clé API, puis exécutez le code suivant :

import got from 'got';

(async () => {

const response = await got("https://api.webscrapingapi.com/v1", {

searchParams: {

api_key: "YOUR_API_KEY",

url: "https://httpbin.org/headers",

keep_headers: '0',

},

headers: {

"Wsa-Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",

"Wsa-Accept-Encoding": "gzip, deflate, br",

"Wsa-Accept-Language": "en-US,en;q=0.9",

"Wsa-Cache-Control": "no-cache",

"Wsa-Cookie": "amp_d915a9=sd12OA1w0P4xMKsMYSmY9n.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1ggrl757h.1ggrl75ci.0.1o.1o; amp_adc4c4=P3ZIfUgU8qzSHI-y0gZvbk.MXVDWTJjd3BXdmRkQ3J0YUpuTkx3OE5JcXVKMw==..1gn51hk3v.1gn51lql7.0.e.e",

"Wsa-Pragma": "no-cache",

"Wsa-Sec-Ch-Ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",

"Wsa-Sec-Ch-Ua-Mobile": "?0",

"Wsa-Sec-Ch-Ua-Platform": "\"Windows\"",

"Wsa-Sec-Fetch-Dest": "document",

"Wsa-Sec-Fetch-Mode": "navigate",

"Wsa-Sec-Fetch-Site": "none",

"Wsa-Sec-Fetch-User": "?1",

"Wsa-Upgrade-Insecure-Requests": "1",

"Wsa-User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",

"Wsa-X-Amzn-Trace-Id": "Root=1-63c93e34-1ad0141279d49bfc28fb058e"

}

})

console.log(response.body)

})()

Dans ce cas, selon la documentation de l'API, nous devons ajouter le préfixe "Wsa-" au nom de l'en-tête afin de le transmettre à la demande. Cette mesure a été mise en œuvre pour éviter que des en-têtes non intentionnels ne soient transmis, comme lorsque la demande d'API est envoyée depuis un navigateur.

Conclusion

Cet article a présenté une vue d'ensemble de l'importance et de l'utilisation des en-têtes HTTP et des cookies dans le cadre du web scraping.

Nous avons vu ce que sont les en-têtes et les cookies, comment vous pouvez les utiliser pour accéder à un contenu restreint et faire en sorte que votre script de grattage apparaisse comme un navigateur légitime, ainsi que comment ils peuvent être utilisés pour le suivi et l'analyse.

Nous avons également présenté certains des en-têtes courants utilisés dans le web scraping et expliqué comment récupérer les en-têtes et les cookies d'un vrai navigateur. Nous avons ensuite utilisé des exemples de code pour illustrer comment les utiliser dans vos scripts de scraping.

En comprenant et en utilisant efficacement les en-têtes et les cookies, vous pouvez améliorer l'efficacité de vos efforts en matière de web scraping. Avec ces connaissances, vous pouvez faire passer vos compétences en scraping au niveau supérieur et extraire des informations précieuses du web.

Nouvelles et mises à jour

Restez au courant des derniers guides et nouvelles sur le web scraping en vous inscrivant à notre lettre d'information.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Articles connexes

vignette
GuidesComment récupérer les données des produits Amazon : Un guide complet des meilleures pratiques et des outils

Explorez les complexités du scraping des données de produits Amazon avec notre guide approfondi. Des meilleures pratiques aux outils tels que l'API Amazon Scraper, en passant par les considérations juridiques, apprenez à relever les défis, à contourner les CAPTCHA et à extraire efficacement des informations précieuses.

Suciu Dan
avatar de l'auteur
Suciu Dan
15 minutes de lecture
vignette
Cas d'utilisationL'utilisation du Web Scraping pour les données alternatives en finance : Un guide complet pour les investisseurs

Explorez le pouvoir de transformation du web scraping dans le secteur financier. Des données sur les produits à l'analyse des sentiments, ce guide donne un aperçu des différents types de données web disponibles pour les décisions d'investissement.

Mihnea-Octavian Manolache
avatar de l'auteur
Mihnea-Octavian Manolache
13 minutes de lecture
vignette
Cas d'utilisationLibérer la puissance des données financières : Explorer les données traditionnelles et alternatives

Plongez dans le rôle transformateur des données financières dans la prise de décision des entreprises. Comprendre les données financières traditionnelles et l'importance émergente des données alternatives.

Suciu Dan
avatar de l'auteur
Suciu Dan
8 minutes de lecture