Vous avez un site web et vous proposez donc en ligne un contenu qui représente une certaine valeur - financière ou autre - à vos yeux. Dans ce cas, il y a de fortes chances pour que d'autres personnes, plus ou moins bien intentionnées, mettent en place des procédures automatisées et des robots pour "scraper" (copier/coller) vos informations afin de les utiliser sans votre accord. Pourtant, il existe des méthodes pour éviter ce vol potentiel ou pour le surveiller, afin d'agir par la suite. En voici quelques-unes...

Par Benoît Chevillot

Introduction

Le web grandit et grossit à une vitesse incroyable, de plus en plus de services sont interconnectés via les API (Application Programming Interface), permettant de récupérer les données de manière standardisée. Que vous ayez besoin de récupérer des données web de manière innocente, légitime ou illégitime, il est encore dans de nombreux cas nécessaire de récupérer la donnée par ses propres moyens. : c’est à dire en scrapant.


Fig.1 Nombre de sites sur le Web. Source : http://www.internetlivestats.com.

Le scraping est vieux comme le Web et le seul moyen de récupérer une donnée depuis un autre site web (à la genèse du web tel que nous le connaissons) était de récupérer la page via un outil spécialisé ou simplement via son bon vieux navigateur en enregistrant la page sur son disque dur local.

Tous les outils nécessaires pour extraire et traiter la donnée étaient déjà présent : Curl, Xpath, … (Xpath 1.0 est une recommandation W3C depuis le 16 Novembre 1999, la première version de Curl date de 1997).

Les outils classiques pour contrôler le scrap sur son site (robots.txt, user agent) sont arrivés en même temps que le Web (1994 pour robots.txt et 1989 pour http).

Puis, rapidement, sont arrivés les "aspirateurs de sites" qui ne faisaient pas dans le détail et récupéraient tout un site de manière massive, comme Httrack (1998).

Les techniques ont ensuite peu évolué, et à part les sélecteurs CSS (une alternative à Xpath pour cibler précisément un contenu dans le document HTML) et les navigateurs interprétants le Javascript, il n’y a rien eu de neuf depuis 20 ans.

Les différentes techniques de scrap

On l'a vu, la récupération de données sur le Web peut se faire de manière très simple via son navigateur en visitant et enregistrant les pages qui contiennent les données désirées puis en passant ces pages simplement dans un traitement de texte pour récupérer les informations de façon plus précise.

A contrario, lorsque l’on veut automatiser les choses de la manière la plus pérenne possible, de nombreuses technologies sont mises en oeuvres : les proxys, les user-agent, les logiciels http, les librairie d’extraction et de nettoyage.

Lorsque l’on surfe sur le web, on utilise le protocole HTTP (hypertext transfert protocol), c’est ce protocole que tous les logiciels de scrap utilisent, à commencer par votre navigateur préféré. Les autres logiciels savent interpréter ou pas Javascript. Le rendu d’une page est en effet souvent différent avec l’utilisation de frameworks Javascript comme jQuery, notamment les fameux chargement Ajax ou Xhr qui permettent de charger du contenu de manière asynchrone.

Le plus connu des logiciels sans Javascript est CURL. Il en existe de nombreux portages dans tous les langages. Le plus connu des logiciels avec Javascript est phantomjs et plus récemment chrome headless.

User-Agent et proxys constituent (principalement) votre empreinte sur un site web, ce sont ces variables que les scrapers font varier pour passer inaperçu. Le user-Agent est une chaine de caractère qui défini le modèle de votre navigateur,et il est très facilement modifiable (voir Fig.2).


Fig.2 Quelques exemples de user-agents. Source : http://www.browser-info.net/useragents.

L’adresse Ip peut également facilement être modifiée en passant par un proxy. Il existe de nombreux service de proxy, les plus utilisés par les scrapers étant les proxy web (par opposition aux proxy socks).

« Un proxy est un composant logiciel informatique qui joue le rôle d'intermédiaire en se plaçant entre deux hôtes pour faciliter ou surveiller leurs échanges. » Wikipedia

Une fois récupérés, les contenus ont souvent besoin d’être traités pour pouvoir en extraire la donnée. On utilise pour cela des librairies d’extraction de contenu : boilerpipe, readability, etc. Ces librairies permettent de détecter les "blocs" de contenu texte selon différents algorithmes. Nous vous conseillons à ce sujet de suivre le projet readability de mozilla qui est mis à jour régulièrement et qui constitue une librairie d’extraction efficace (https://github.com/mozilla/readability).

Pour localiser le contenu au sein d’une page web (représenté par son arbre DOM) (par exemple extraire la balise title ou h1) il existe 3 technologies :

  1. les expressions régulières : pratique à utiliser lorsque l’on connait le format de texte de la ressource à extraire ou que la cible à extraire est très simple mais très lourd pour cibler des éléments du DOM plus profond.
    Exemple de détection de balise title avec les regex : <title>(.*?)</title>
  2. Xpath : ce language de requête a été conçu pour cibler des des éléments xml (et donc html), il est donc idéal pour l’extraction de contenu.
    Exemple de détection de balise title avec Xpath : //title
  3. csspath : c’est l’équivalent de Xpath mais en utilisant les sélecteurs CSS que vous avez l’habitude de voir dans les pages web.
    Exemple de détection de balise title avec csspath : title

« Document Object Model (DOM) est une interface de programmation normalisée par le W3C, qui permet à des scripts d'examiner et de modifier le contenu du navigateur web. Par DOM la composition d'un document HTML ou XML est représentée sous forme d'un jeu d'objets reliés selon une structure en arbre. » Wikipedia

Les mauvaises pratiques des scrapers

Si la plupart des robots et des scrapers respectent les règles dictées par le robots.txt certains acteurs n’ont aucun scrupule et cumulent les mauvaises pratiques.

Il est d’usage de respecter un rythme lent lors du scrap d’un site pour éviter de surcharger le serveur qui l’héberge. Lorsqu'aucun rythme n’est respecté et que le scraper envoie des centaines de requêtes à la seconde, le serveur se retrouve rapidement en surcharge. Les scrapers sont censé implémenter une détection du temps de réponse du serveur, si celui-ci augmente, c’est qu’il est temps de réduire le volume de requêtes pour le réajuster ensuite.

Les images "hotlinkées" (technique qui consiste à afficher sur un site une image qui provient d’un autre site) sont également une mauvaise pratique. Si le site sur lequel se retrouve l’image qu'on vous a "volée" connait une explosion de trafic, votre site va  se retrouver fortement impacté s'il n’est pas dimensionné correctement.

Impacts du scrap sur vos ressources et votre contenu

Le premier impact du scrap est le vol de contenu. Si vous possédez un site à forte valeur ajoutée, vos contenus sont à la merci de tout le monde et le pillage est un risque évident. Nous verrons plus tard comment s’en protéger.

Un des impacts les plus sous-estimé est la surcharge du serveur qui héberge le site. Quand tous les robots légitimes et illégitimes parcourent vos pages, il se peut qu’ils consomment beaucoup de ressources car ils agissent comme un visiteur classique et chargent toutes les ressources issues des pages web. Un exemple flagrant des pages qui consomment beaucoup de ressources sont les pages de catégories des site commerce. En effet, ces pages sont souvent consommatrices de requêtes vers la base de données.

Un serveur surchargé provoque des lenteurs de chargement des pages, voire des plantages complets (la fameuse erreur 500 et le guru qui médite). L’impact sur la conversion est immédiat : le visiteur s’en va. L’impact sur le SEO met plus de temps à se faire sentir : si les lenteurs persistent, vous risquez le déclassement sur vos mots clés.

Il est important de se rendre compte que la charge du serveur qui héberge le site n’est pas du tout proportionnelle à la machine qui le scrape. En effet, les ressources en jeu pour récupérer la donnée sont dérisoires par rapport aux ressources nécessaires pour générer une page web (serveur web + language de programmation + base de données, voir Fig.3). Il est ainsi aisé de faire tomber un gros site s'il est mal protégé.


Fig.3. La chaine d’exécution d’un serveur web classique. Source : http://igm.univ-mlv.fr.

Comment détecter le scrap nocif

La première technologie à mettre en place est une analyse et détection du trafic web. Il en existe deux types, basée sur l’analyse de log du server web en temps réel (Google Analytics, Urchin, Awstats), … ou via un sonde spécialisée (Newrelic, …). Il est également possible d’analyser vos logs serveur manuellement pour détecter les problèmes.

Dans tous les cas, nous recherchons des "motifs" récurrents basés sur les informations à notre disposition : adresses IP, pages consultées, dates de passage et user agent.

Une technique efficace pour détecter les "bad bots" est d’interdire une URL précise dans le robots.tx. Si le robot va la visiter, c’est qu’il ne respecte pas les conventions et qu’il doit être bloqué.

Lorsqul’on détecte un motif qu’on ne souhaite pas, on effectuealors une requête type "reverse DNS" pour vérifier à qui appartient l’adresse IP (Fig.4).


Fig.4. Reverse DNS d’une IP Googlebot.

En PHP, vous pouvez utiliser la fonction gehostbyaddr pour faire vos requêtes reverse DNS. Attention toutefois car ces requêtes sont très consommatrices de ressources.

Comment se protéger des scrapers malintentionnés

Fort heureusement, il existe des moyens de se protéger du scrap, même si aucune protection n’est réellement efficace sans effets de bords.

La première des techniques à mettre en place est le fichier robots.txt. Vous pouvez y déclarer quelles parties de votre site sont accessibles (ou interdites) et pour quels user-agents. Vous pouvez également définir le rythme de crawl. Gardez toutefois à l’esprit que le fichier robots.txt n’est qu’une convention et que si un scraper décide de passer outre, rien ne l’en empêchera, mais cette technique fonctionnera quand même avec la plupart des acteurs légaux du marché. Faites bien attention à ne pas bloquer les robots légitimes comme GoogleBot ou autres robots d’indexation sur les moteurs de recherche qui vous procurent du trafic car le résultat serait catastrophique pour votre référencement (Fig.5).


Fig.5. A NE SURTOUT PAS FAIRE.

Vous pouvez trouver une liste des "bad bots" sur botreports.com : http://www.botreports.com/badbots/index.shtml.

Lorsque vous avez à faire à un scraper indélicat qui ne respecte pas les conventions, vous devrez mettre en oeuvre des solutions plus radicales.

Pour protéger les ressources de votre serveur web et empêcher les  scrapers de passer sur votre site, une des techniques possibles est la mise en place d’outils de détection et de blocage d’attaques de trafic à base de pattern comme fail2ban. Ces outils vont écouter le trafic entrant et "blacklister" certains robots / scrapers en fonction de leurs actions. Vous pouvez par exemple définir de bloquer un scraper si vous détectez que son adresse IP consulte plus de x pages par secondes, vous pouvez encore décider de bloquer un scraper qui consulte des pages bloquées par le robots.txt. Etc.

Une autre technique efficace pour protéger les ressources de votre serveur est de mettre en place un "serveur de cache". Ce serveur va renvoyer une version mise en cache de votre page web et évitera ainsi de solliciter toute la chaîne du serveur web (voir Fig.3). Pour aller plus loin vous pouvez aussi configurer ce serveur de cache pour envoyer une autre version de votre site aux scrapers que vous détectez via leur User-Agent. En utilisant cette dernière technique, vous pourrez servir un contenu différent de celui que vous servez aux visiteurs et robots légitimes et ainsi protéger votre contenu.

Vous pouvez également utiliser la technique précédente tout simplement avec votre serveur web ou directement dans le code de vos sites, c’est ce qu’on appelle le "cloaking". Nous n'allons pas détailler ici son fonctionnement car il a été abordé de nombreuses fois dans cette newsletter (et ces techniques sont considérées comme du spam par Google).

« Le cloaking (de l'anglais signifiant « dissimulation ») est une technique utilisée par les black hat pour optimiser leur positionnement dans les moteurs de recherche. Elle consiste pour le serveur web ainsi programmé à présenter un contenu de page web différent suivant que le client distant est un robot de moteur de recherche ou un internaute humain. » Wikipedia

Grâce au cloaking vous pouvez vous protéger des voleurs d’images en hotlink tout simplement en détectant le "referer" de l’image (le site web qui héberge l’image).

C’est la technique du cloaking qui est mise en oeuvre chez les acteurs de la presse en ligne : ils affichent le début de l’article à tout le monde, mais cachent la fin sauf aux utilisateurs payants et à Googlebot. Ils s’appuient pour cela sur du cloaking en vérifiant bien sur que GoogleBot est bien qui il prétend être via la requête reverse DNS. Illégal (et donc potentiellement répréhensible) si on suit à la lettre la "loi Google" mais diablement efficace pourtant.

Une autre technique consiste à renvoyer une version différente de son arbre Dom à chaque visite d’un scraper. Celui-ci sera vite perdu pour extraire les données de votre site, car les technologies d’extraction qu’il utilise ne fonctionneront plus. Malheureusement cette dernière technique ne fonctionnera pas si le scraper souhaite récupérer le texte de votre page dans sa globalité.

Dans le cas ou vous avez détecté une adresse IP qui vous est clairement nuisible, vous pouvez également la bloquer directement via une ligne dans la configuration de votre serveur web (voir Fig.6).


Fig. 6. Exemple de blocage d’adresse IP dans le fichier htaccess d'Apache.

Pour terminer voici une technique qui ne FONCTIONNE PAS DU TOUT pour vous protéger du scrap mais que beaucoup pensent utiliser à bon escient : utiliser la technique des feuilles de styles (display:none) pour masquer votre contenu. En effet l’utilisation de cette technique n’est efficace que pour les lecteurs humains, les robots et scripts peuvent continuer à voir le contenu.

Conclusion

On voit encore trop souvent des sites web (de grande envergure) qui ne sont pas du tout protégés contre le scraping. Les premières techniques de base à mettre en oeuvre sont pourtant simples (robots.txt). Enfin, gardez à l’esprit qu'aucun contenu n’est protégé à 100% sur le Web. Il vous faudra peser le pour et le contre entre les techniques à mettre en place et la valeur de votre contenu...


Benoît Chevillot
Consultant SEO, DivioSeo (http://divioseo.fr)