En-têtes HTTP pour le web scraping

Découvrez les en-têtes HTTP les plus courants, pourquoi ils sont importants pour le web scraping et comment les optimiser.
15 min de lecture
HTTP Headers for Web Scraping

Le contexte, qu’il soit culturel, environnemental ou relationnel, est présent dans toutes les communications, et il influence l’efficacité de la communication. Dans les communications Web, les en-têtes HTTP sont le contexte technique que les serveurs Web et les clients échangent lors de l’envoi de requêtes HTTP ou de la réception de réponses HTTP. Ce contexte peut être utilisé pour faciliter l’authentification, déterminer le comportement de mise en cache ou gérer l’état de la session. Il aide également les serveurs Web à déterminer l’origine de la requête HTTP et la manière d’y répondre. Cette réponse peut inclure le rendu d’un site Web répondant aux exigences de l’appareil de votre client ou la fourniture de données à votre intention. Lorsque cette dernière opération est réalisée à l’aide d’un robot, l’opération est appelée web scraping, ce qui est utile lorsque vous devez obtenir automatiquement des données à partir d’un site Web.

Lorsque vous créez un scraper, il est facile d’oublier de configurer votre en-tête HTTP, car les valeurs par défaut permettent à vos requêtes de se poursuivre. Cependant, sans en-têtes HTTP correctement configurés, il est difficile de maintenir une communication continue entre votre scraper et le serveur Web. En effet, les serveurs Web peuvent être configurés pour détecter les robots et les scripts automatisés en fonction des informations contenues dans les en-têtes HTTP par défaut, tels qu’User-AgentReferer et Accept-Language.

Cependant, si vous configurez correctement vos en-têtes, vous pouvez simuler un trafic utilisateur normal, améliorant ainsi la fiabilité de vos opérations de scraping. Dans cet article, vous apprendrez tout sur les en-têtes HTTP, leur rôle dans le web scraping et la manière de les optimiser pour une collecte de données efficace.

Pourquoi avez-vous besoin d’en-têtes HTTP ?

Les en-têtes HTTP sont des paires clé-valeur dans les requêtes et les réponses requises pour les communications Web. Le serveur Web reçoit des informations et des instructions concernant le client et la ressource d’intérêt via des en-têtes de requête. Pendant ce temps, les en-têtes de réponse fournissent au client plus d’informations sur la ressource récupérée et la réponse reçue. Bien qu’il existe de nombreux en-têtes HTTP, les suivants sont parmi les plus importants pour le web scraping :

User-Agent

User-Agent est une chaîne qui identifie de manière unique le client que vous utilisez pour envoyer une requête. Le contenu de cette chaîne peut inclure le type d’application, le système d’exploitation, la version du logiciel et le fournisseur du logiciel.

Par défaut, cet en-tête est défini sur une valeur qui permet d’identifier facilement votre scraper en tant que robot. Par exemple, si vous souhaitez extraire les données de prix d’un site Web de commerce électronique à l’aide d’un script de requêtes Python, votre scraper enverra un User-Agent similaire aux suivants dans son en-tête HTTP :

"python-requests/X.X.X"

Vous pouvez éviter d’être détecté en modifiant l’User-Agent pour imiter différents navigateurs et appareils. Pour ce faire, vous devez remplacer l’en-tête User-Agent des requêtes Python par le suivant :

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

Ce nouvel en-tête inclut des informations concernant le navigateur et la plateforme native sur laquelle il s’exécute.

Accept-Language

L’en-tête Accept-Language vous permet de spécifier la ou les langues dans lesquelles vous souhaitez recevoir la ressource demandée. Si nécessaire, vous pouvez inclure le code du pays ou le type d’alphabet. Par exemple, si vous définissez Accept-Language sur « en-US », cela signifie que vous vous attendez à ce que la ressource soit en anglais tel qu’il est parlé aux États-Unis d’Amérique, même si vous vous trouvez sur un autre continent. Vous pouvez également utiliser le type d’alphabet pour définir l’en-tête comme étant la version en script latin de la langue serbe en spécifiant « sr-Latn ». Cela garantit que vous récupérez les données localisées appropriées.

Lorsqu’il existe plusieurs langues, l’en-tête Accept-Language devient une liste de langues séparées par des virgules avec des valeurs de qualité qui aident à définir l’ordre de priorité. Par exemple : « en -GB;q=1.0, en-US;q=0.9, fr;q=0.8 », où des valeurs plus élevées de q indiquent une priorité plus élevée avec q allant de 0 à 1.

Cookie

L’en-tête Cookie contient des données qui permettent au serveur Web d’identifier une session utilisateur sur plusieurs cycles de demande-réponse. Lors du scraping, vous pouvez générer des cookies côté client (ou utiliser des cookies précédemment stockés) et les inclure dans l’en-tête HTTP d’une nouvelle requête. Cela permet au serveur Web d’associer votre requête à une session utilisateur valide et de renvoyer les données nécessaires. Par exemple, si vous devez effectuer plusieurs requêtes pour obtenir des données spécifiques à l’utilisateur d’un site Web de commerce électronique, vous devez inclure des cookies de session dans l’en-tête Cookie de la requête HTTP pour que votre scraper reste connecté, conserver les données pertinentes et éviter les systèmes de détection de robots basés sur les cookies.

L’en-tête Cookie consiste en une liste d’une ou de plusieurs paires clé-valeur séparées par un point-virgule et une espace (« ;  »). Il prend généralement la forme « nom0=valeur0; nom1=valeur1; nom2=valeur2 ».

Referer

Referer contient l’URL absolue ou partielle de la page à partir de laquelle vous avez demandé la ressource. Par exemple, lorsque vous parcourez la page d’accueil d’un site Web de commerce électronique, vous pouvez choisir de cliquer sur un lien qui suscite votre intérêt. L’en-tête Referer de la requête HTTP qui ouvre la page Web suivante pointe vers la page d’accueil du site Web de commerce électronique à partir duquel vous avez lancé la requête. Si vous naviguez vers d’autres pages Web à partir de la page en cours, chaque page précédemment consultée sert de Referer pour la suivante. Ceci est analogue à la façon dont les recommandations fonctionnent dans les interactions humaines.

Bien entendu, certains sites Web vérifient cet en-tête dans le cadre de leur mécanisme antiscraping. Cela signifie que si vous souhaitez simuler le flux de trafic naturel en provenance d’autres sites Web et éviter les blocages, vous devez définir l’en-tête Referer sur une URL valide, telle que la page d’accueil du site ou l’URL d’un moteur de recherche.

Comment optimiser les en-têtes HTTP pour le Web Scraping

Lorsque vous faites du scraping, n’oubliez pas que les données dont vous avez besoin sont précieuses pour leurs propriétaires et qu’ils peuvent hésiter à les partager. Par conséquent, de nombreux propriétaires prennent des mesures pour détecter les agents automatisés qui tentent d’accéder à leur contenu. S’ils y parviennent, ils peuvent vous bloquer ou renvoyer des données non pertinentes.

Les en-têtes HTTP vous aident à contourner ces mesures de sécurité en donnant l’impression que votre scraper est un internaute ordinaire qui navigue sur son site Web. En définissant correctement les en-têtes, tels qu’User-AgentAcceptAccept-Language et Referer, vous pouvez imiter efficacement un trafic Web normal tout en empêchant le serveur Web d’identifier votre robot comme un scraper.

Récupération et définition d’en-têtes personnalisés

Pour montrer comment optimiser vos en-têtes HTTP, faisons une requête Python pour scraper des livres de la catégorie mystères du site de commerce électronique fictif Books to Scrape. Avant de faire cela, vous devez récupérer les en-têtes HTTP à partir des outils de développement de votre navigateur.

Pour commencer, visitez le site Web depuis un autre onglet de navigateur :

Lancez ensuite les outils de développement dans votre navigateur. Pour ce faire, vous pouvez cliquer avec le bouton droit de la souris n’importe où sur la page et sélectionner Inspecter ou consulter la sous-liste des outils. Cliquez ensuite sur l’onglet Réseau dans le menu supérieur des outils de développement :

Lorsque l’onglet Réseau est ouvert, cochez la case à côté de Désactiver le cache. Cela vous permet de voir l’intégralité de l’en-tête de la requête. Cliquez ensuite sur le lien vers la catégorie Mystères dans la liste des catégories du site Web. Cela ouvre une page contenant des livres de cette catégorie, mais surtout, une liste des demandes apparaît dans l’onglet Réseau de la fenêtre des outils de développement :

Faites défiler la page vers le haut de la liste et cliquez sur le premier élément. Cela ouvre une fenêtre plus petite dans les outils de développement. Accédez à En-têtes de requête :

Sous En-têtes de requête, vous trouverez les en-têtes de requêtes HTTP, en particulier ceux que vous venez de découvrir. Pour utiliser ces en-têtes avec un scraper, créez un script Python avec des variables pour les en-têtes User-AgentAcceptAccept-LanguageCookie et Referer :

import requests

referer = "https://books.toscrape.com/"
accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"
accept_language = "en-GB,en;q=0.6"
cookie = "zero-chakra-ui-color-mode=light-zero; AMP_MKTG_8f1ede8e9c=JTdCJTIycmVmZXJyZXIlMjIlM0ElMjJodHRwcyUzQSUyRiUyRnd3dy5nb29nbGUuY29tJTJGJTIyJTJDJTIycmVmZXJyaW5nX2RvbWFpbiUyMiUzQSUyMnd3dy5nb29nbGUuY29tJTIyJTdE; AMP_8f1ede8e9c=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjI1MjgxOGYyNC05ZGQ3LTQ5OTAtYjcxMC01NTY0NzliMzAwZmYlMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzA4MzgxNTQ4ODQzJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTcwODM4MjE1NTQ2MCUyQyUyMmxhc3RFdmVudElkJTIyJTNBNiU3RA=="
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"

custom_headers = {
    "User-Agent": user_agent,
    "Accept": accept,
    "Accept-Language": accept_language,
    "Cookie": cookie,
    "Referer": referer
}

Dans cet extrait de code, vous importez la bibliothèque requests et vous définissez des variables pour chaque en-tête HTTP sous forme de chaînes. Vous créez ensuite un dictionnaire appelé headers pour mapper les noms des en-têtes HTTP aux variables définies.

Ajoutez alors le code suivant au script pour envoyer une requête HTTP sans les en-têtes personnalisés et afficher le résultat :

URL = 'https://books.toscrape.com/catalogue/category/books/mystery_3/index.html'

r = requests.get(URL)
print(r.request.headers)

Ici, vous attribuez l’URL des livres de la catégorie mystères à une variable. Ensuite, vous appelez la méthode requests.get avec cette URL comme seul paramètre et vous affichez les en-têtes de la demande.

Votre résultat devrait ressembler à ceci :

{'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

Comme vous pouvez le constater, les en-têtes HTTP par défaut sont susceptibles d’identifier votre scraper comme étant un robot. Mettez à jour la ligne requests.get en transmettant un paramètre supplémentaire à la fonction :

r = requests.get(URL, headers=custom_headers)

Ici, vous transmettez le dictionnaire custom_header que vous avez créé et le paramètre URL à la méthode requests.get.

Votre résultat devrait ressembler à ceci :

{'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', 'Connection': 'keep-alive', 'Accept-Language': 'en-GB,en;q=0.6', 'Cookie': 'zero-chakra-ui-color-mode=light-zero; AMP_MKTG_8f1ede8e9c=JTdCJTIycmVmZXJyZXIlMjIlM0ElMjJodHRwcyUzQSUyRiUyRnd3dy5nb29nbGUuY29tJTJGJTIyJTJDJTIycmVmZXJyaW5nX2RvbWFpbiUyMiUzQSUyMnd3dy5nb29nbGUuY29tJTIyJTdE; AMP_8f1ede8e9c=JTdCJTIyZGV2aWNlSWQlMjIlM0ElMjI1MjgxOGYyNC05ZGQ3LTQ5OTAtYjcxMC01NTY0NzliMzAwZmYlMjIlMkMlMjJzZXNzaW9uSWQlMjIlM0ExNzA4MzgxNTQ4ODQzJTJDJTIyb3B0T3V0JTIyJTNBZmFsc2UlMkMlMjJsYXN0RXZlbnRUaW1lJTIyJTNBMTcwODM4MjE1NTQ2MCUyQyUyMmxhc3RFdmVudElkJTIyJTNBNiU3RA==', 'Referer': 'https://books.toscrape.com/'}

Vous pouvez voir ici que les en-têtes ont été mis à jour avec les informations obtenues depuis votre navigateur. Il est donc plus difficile pour les serveurs Web de détecter que vous visitez automatiquement leurs sites, ce qui réduit vos chances d’être bloqué.

Avantages de l’optimisation des en-têtes

Il est essentiel d’optimiser correctement vos en-têtes HTTP pour garantir le succès continu de vos opérations de scraping.

L’un des avantages de l’optimisation est que le taux de blocage est réduit. Grâce à des en-têtes optimisés, les interactions de vos scrapers avec les sites Web sont similaires à celles d’un utilisateur classique. Vous pouvez ainsi éviter certains systèmes de détection de robots, réduisant ainsi la probabilité que votre scraper soit bloqué au fil du temps (taux de blocage).

Un autre avantage de l’optimisation de vos en-têtes HTTP est l’augmentation du taux de réussite, car la réduction des taux de blocage facilite le scraping de données.

En outre, le fait de vous concentrer sur l’optimisation de vos en-têtes HTTP améliore l’efficacité de vos opérations de scraping. Cela vous garantit de recevoir des données pertinentes qui répondent à vos besoins.

Conseils d’optimisation des en-têtes

Bien qu’il soit important de configurer correctement vos en-têtes pour garantir le succès de vos projets de web scraping, ce n’est pas la fin de l’histoire, surtout lorsque vous devez extraire des données à grande échelle. Voici quelques conseils pour augmenter le taux de réussite de votre scraper :

Alternez les en-têtes

Au-delà de la définition d’en-têtes tels que User-Agent pour imiter le trafic normal d’un utilisateur, vous pouvez définir plusieurs en-têtes HTTP distincts et les alterner par requête. Cela vous permet de simuler l’accès de plusieurs utilisateurs au serveur Web et de répartir le trafic généré entre eux. Cela réduit encore plus le risque d’être identifié comme un robot et d’être bloqué.

Selon l’ampleur de votre opération de scraping, vous pouvez utiliser entre dix et des centaines de User-Agents. Plus vous devez envoyer de requêtes dans un court laps de temps, plus il est raisonnable pour vous de faire alterner de plus en plus d’User-Agents.

Maintenez les en-têtes à jour

Une autre considération lorsqu’il s’agit d’optimiser les en-têtes HTTP est leur maintenance régulière. Les utilisateurs mettent généralement à jour leur navigateur à mesure que de nouvelles versions sont publiées. Il y a donc de fortes chances que les en-têtes valides à un moment donné correspondent à ceux de la version la plus récente du navigateur. Si vous configurez votre en-tête avec un ou plusieurs User-Agents faisant référence à des versions de navigateur ou de logiciel obsolètes, les serveurs Web seront en mesure de vous distinguer parmi la foule des utilisateurs réguliers et éventuellement de bloquer votre requête. Il en va de même pour les autres en-têtes qui nécessitent des mises à jour fréquentes.

Évitez les mauvaises configurations d’en-tête

Vous devez également vous efforcer d’éviter les mauvaises configurations d’en-tête. Cela peut se produire lorsqu’un en-tête, tel que User-Agent, ne correspond pas à tous les autres en-têtes standard que vous avez définis. Par exemple, si User-Agent est configuré sur un navigateur Mozilla Firefox fonctionnant sous Windows alors que les autres en-têtes sont définis pour un navigateur Chrome fonctionnant sous Windows, votre scraper est susceptible d’être bloqué.

En outre, lorsque vous utilisez un serveur proxy, qui fait office d’intermédiaire entre le client et le serveur, vous pouvez ajouter involontairement des en-têtes qui permettent à un système de détection du navigateur d’identifier vos requêtes comme étant automatisées. Pour vérifier vos en-têtes, envoyez des requêtes de test et assurez-vous que votre serveur proxy n’ajoute pas d’en-têtes d’identification.

Conclusion

Dans cet article, vous avez découvert les en-têtes HTTP, notamment les en-têtes User-AgentRefererAccept-Language et Cookie , qui comptent parmi les en-têtes les plus importants pour le web scraping. Vous devez optimiser vos en-têtes HTTP pour garantir la longévité et l’utilité de vos opérations de scraping.

L’utilisation correcte des en-têtes HTTP pour effectuer des requêtes dans vos projets de web scraping réduit votre taux de blocage et augmente votre taux de réussite en vous permettant de contourner plus facilement les mécanismes antiscraping. Cela rend également votre opération de scraping plus efficace. Cependant, les mécanismes avancés d’antiiscraping impliquant des défis JavaScript et des CAPTCHA peuvent toujours constituer un obstacle. Bright Data simplifie vos opérations de scraping en vous fournissant un réseau proxy convivial et primé, un navigateur de scraping avancé, un IDE de Web scraper complet et un débloqueur Web. Que vous soyez débutant ou expert, ces offres de produits peuvent vous aider à atteindre vos objectifs de scraping. Commencez un essai gratuit et découvrez les offres de Bright Data dès aujourd’hui.