Web scraping
Analytique et exploration de données | |
---|---|
Module: Text mining | |
⚐ à finaliser | ☸ intermédiaire |
⚒ 2020/03/19 | |
Catégorie: Analytique et exploration de données |
Définition
Le web scraping consiste à extraire des informations dans une page web afin de réutiliser les données dans un autre cadre et/ou sous une autre forme par rapport au contenu original. Le web scraping est souvent associé à l'indexation des pages web par les moteurs de recherche (i.e., web crawling). Le web scraping se différencie cependant du web crawling pour ses finalités liées au data mining ou text mining : l'intérêt du web scraping consiste à transformer des données non-structurées disponibles dans le web afin d'obtenir des données qui peuvent être traitées successivement, par exemple à travers des analyses (qualitatives et/ou quantitatives).
Cadre d'utilisation
Le web scraping est utilisé dans différents activités telles que :
- Utilisation privée : par exemple dans le cas de services online qui permettent d'agréger des éléments provenant de différents sites (exemple : Netvibes)
- Recherche académique : le web est une source de données qui concerne plusieurs domaines et le grand nombre de données disponibles permettent, parfois, de combler les biais méthodologiques liés aux informations disponibles sur le web (véridicité, authenticité, etc.)
- Utilisation commerciale : comparaison entre informations disponibles entre sites concurrents (exemple : billets d'avion de différentes compagnie pour le même trajet)
- Analyse marketing : les "traces" laissées sur internet sont de plus en plus nombreuses et permettent de fournir une idée de nos préférences, habitudes, etc. - ces données peuvent très bien être exploitées pour des analyses de marketing (dans le cadre notamment de la publicité online)
Modalités d'extraction
On peut faire une distinction de base concernant le web scraping selon la modalité d'extraction des données :
- Extraction manuelle : une personne navigue le web pour extraire informations pertinentes aux intérêts depuis les pages qu'elle visite. La pratique la plus commune pour ce type d'extraction et le simple copier/coller.
- Extraction sémi-automatique : une personne utilise un logiciel ou une application web pour aspirer/nettoyer les éléments d'une ou plusieurs pages web pertinents aux intérêts.
- Extraction automatique : l'extraction se fait de manière totalement automatique grâce à l'émulation, par une machine, d'une navigateur web qui visite des pages et qui est capable de suivre les différents liens afin de générer automatiquement un corpus de pages liées entre elles.
Modalités de traitement
Dans les cas d'extraction automatique ou sémi-automatique on peut distinguer ultérieurement par rapport au traitement des données recueilles :
- Aucun traitement : les données recueillies ne sont pas traitées et sont tout simplement rendues disponibles - par exemple à travers un fichier de texte ou un spreadsheet - pour une analyse successive, à travers notamment un autre logiciel spécialisé (e.g. analyse de texte)
- Visualisation des données brutes : les données ne sont pas traitées mais seulement organisées selon des critères et les résultats sont affichés à l'aide de représentations graphiques similaires au format original (e.g. news feed, mash-up)
- Traitement des données : les données sont traitées à travers des algorithmes qui déterminent un certain résultat sur la base des analyses (e.g. comparaison de prix entre marchants online)
- Traitement des données et visualisation : les données sont traitées et, en plus, une représentation graphique adéquate à l'analyse des données et également fournie (e.g. nuages de mots-clés, cartes conceptuelles)
Techniques d'extraction
Dans le cadre d'extractions automatiques ou semi-automatiques, il est nécessaire d'identifier dans les documents analysés les données d'intérêt afin de les séparer de l'ensemble du contenu. Voici une liste non exhaustive de techniques qui peuvent être utilisées :
- Expressions régulières
- XPath
- Traverser le DOM
Expressions régulières
Les expressions régulières sont une fonctionnalité disponible pratiquement dans tout langage de programmation et qui permet d'identifier des patterns à l'intérieur de contenu textuel. Grâce à une syntaxe qui permet de combiner plusieurs règles d'analyse en même temps, il est possible d'extraire de manière ponctuelle des éléments qui correspondent aux critères définis dans l'expression régulière. Le mécanisme consiste à rechercher toutes les ressemblances entre la chaîne de caractères à trouver (le pattern) à l'intérieur du contenu cible de l'analyse. Les expressions régulières sont une technique très puissante d'extraction de contenu car elles s'appliquent indépendamment de la structure du document analysé. Cette puissance nécessite cependant une syntaxe assez complexe qui n'est pas très intuitive.
XPath
XPath est un standard du W3C (l'organisme qui s'occupe des standards du Web) pour trouver des éléments dans un document XML. Ce langage exploite la structure hiérarchique des nœuds (et attributs) d'un document XML et nécessite par conséquent une structure de document très précise, ce qui n'est pas forcément le cas dans les pages HTML (voir plus bas dans la section HTML et web scraping).
- Voir Web scraping avec R
Traverser le DOM
Cette technique est similaire à XPath car elle exploite également la structure hiérarchique d'une page web à travers le DOM (Document Object Model). Il s'agit encore une fois d'un standard W3C qui permet d'accéder au contenu des différentes balises d'une page HTML grâce à leur positionnement hiérarchique dans la page. Pour accéder au contenu d'intérêt, on peut utiliser par exemple la notation des CSS (feuilles de style).
- Voir Web scraping avec R
Web scraping et web sémantique
Le web scraping assume une grande importance en fonction de l'évolution progressive du web qui est passé d'un énorme réseau hypermedia de contenu (c'est-à-dire de documents) créés par des humains, à un système d'intégration de contenu généré par différents agents. Ces agents sont bien sûr parfois encore des humains, mais ils sont désormais de plus en plus d'autres dispositifs tels que des bases de données, des senseurs de température, webcams, lecteurs optiques, etc. Les données mises à disposition par ces dispositifs peuvent être analysées ultérieurement par d'autres dispositifs encore. On parle dans ce cas de "communication entre machines". Ce type de communication nécessite de paramètres beaucoup plus stricts par rapport à la communication humaine : les dispositifs n'ont évidemment pas la même capacité d'abstraction pour faire des inférences sur le contenu si ce n'est pour la structure de l'information. Pour faciliter la communication entre machines à travers le web, plusieurs initiatives ont été essayées. Parmi ces initiatives on retrouve :
- Les API (Application Programming Interface) : dans le cadre des applications web, les API représentent des interfaces qui permettent d'obtenir le contenu dans des formats différents par rapport à l'HTML standard des pages mises à disposition pour les navigateurs web. Ces formats alternatifs sont souvent des formats exclusivement textuels (donc sans balises), JSON ou XML. Ce même Wiki dispose par exemple d'une API
- Les RSS : la syndication de contenu web se fait à travers des documents XML utilisés souvent dans le cadre de blog ou sites de news pour faciliter la diffusion des nouvelles informations disponibles. Les RSS sont un bon exemple des difficultés de trouver des standards adéquats dans la communication machine-machine car il existe plusieurs formats RSS et aucun ne peut se considérer officiel.
- Metadonnées, microformats, microdata, ... : tous ces éléments partagent l'idée de créer des schémas pour identifier facilement du contenu particulier à l'intérieur des pages web. Cependant, chacun de ses éléments est basé sur l'acceptation des ces schémas en tant que standards partagés, et jusqu'à présent aucun standard ne s'est jamais imposé.
Malgré ces tentatives, le véhicule principale des données à travers le web reste le langage HTML. Le rapport entre Web scraping et HTML est traité dans la section suivante.
Web scraping et HTML
Les difficultés dans l'extraction de données à partir d'une page web sont liés au langage HTML lui-même. En effet, ce langage a représenté différentes fonctions dans le temps et ceci en dépit du fait que sa structure est restée relativement intacte : on peut très bien accéder aujourd'hui aux premières pages mises en ligne dans le Web. Cette compatibilité dans le temps a sans doute des avantages, mais représente également une limite notamment en ce qui concerne la structuration des documents HTML. Pour limiter cette problématique, en 1998 le W3C (l'organisme qui s'occupe des standards du Web) abandonne le format HTML (arrivé à ce point à la version 4) et entame un processus qui vise à rapprocher le langage HTML aux formats XML : c'est le format XHTML 1.0. Ce format implique des règles plus strictes par rapport au format HTML, notamment en ce qui concerne l'emboitement et la fermeture des balises. Ces règles sont censées faciliter la communication entre machine (et par conséquent aussi le web scraping) grâce à une structure plus organisée des données. Cependant, cette organisation ne concerne que la disposition des balises : les documents peuvent être structurées de plusieurs manières à condition qu'ils respectent un certain ordre dans l'ouverture et fermeture des balises. De plus, les producteurs des navigateurs web n'ont jamais vraiment adhéré aux standards plus strictes en privilégiant une approche pragmatique : montrer le contenu de la page, même avec des erreurs dans le code. Ces aspects sont à la base de l'échec de renforcer les standards dans la version XHTML 2.0. À la place de continuer dans le sillage du XHTML, le W3C a plutôt décidé de poursuivre un projet alternatif, appelé HTML5. À la base de cette nouvelle version du langage il y a un changement de paradigme radical :
- Le HTML a longtemps été considéré comme un langage de mise en forme des documents web, c'est-à-dire que les balises étaient choisies en fonction du layout final affiché à l'écran. Si on voulait un texte en gras on utilisait la balise
b
, pour une liste à puces la combinaisonul > li
et ainsi de suite. - Grâce à l'introduction des feuilles de style CSS, la structure graphique de la page est prise en charge par les propriétés de style, ce qui permet notamment de faire apparaitre deux balises différentes exactement de la même manière à l'écran. Cette constatation implique que les balises HTML perdent leur intérêt graphique, car le comportement de toute balise peut être achevé par une autre balise avec les mêmes propriétés de style.
- Libéré de sa fonction graphique, le langage HTML peut donc être utilisé en tant que véritable langage de démarcation (c'est-à-dire mark-up) selon des critères d'association balise > contenu plutôt que balise > forme.
Cette constatation est à la base de la philosophie "sémantique" de HTML5
HTML5 et le web sémantique
HTML5 introduit des nouvelles balises qui ont principalement un intérêt sémantique. Ces balises peuvent se diviser en deux catégories :
- Les balises de structuration du contenu
- Les balises de marquage
Les balises de structuration du contenu
Dans la perspective des développeurs de pages web il y a souvent des éléments qui sont présents dans la plupart des sites : une entête qui suggère l'argument du site, un menu de navigation qui permet d'accéder aux différentes ressources disponibles, le contenu principal de la page (c'est-à-dire ce qui la rend "unique" par rapport aux autres pages du site), et ainsi de suite. Avant l'introduction de balises spécifiques en HTML5, les développeurs utilisaient pour chacun de ces éléments récurrents une balise div
à laquelle ils associaient une classe souvent avec une relation sémantique avec le contenu, par exemple div class="header"
pour l'entête, div class="navigation"
pour le menu, et ainsi de suite. Cette pratique était cependant loin de représenter un standard : d'une part, chaque développeur pouvait choisir son propre nom de classe (par exemple dans sa propre langue maternelle), et de l'autre les classes sont des éléments de style et en accord avec les bonnes pratiques de développement, il faudrait séparer le contenu de la forme. Dans cette perspective, HTML5 introduit des balises telles que :
header
nav
aside
footer
main
article
section
Pour plus de détails consulter la page HTML5.
Les balises de marquage
D'autres balises ont été introduites mais cette fois-ci dans la perspective de structurer les informations ponctuelles plutôt que la structure générale de la page. Parmi ces balises on trouve time
, output
, mark
, del
, ou ins
. Prenons l'exemple de la balise time qui sert à signaler la présence dans le code d'une date. Cette balise n'est pas associée à aucune structure graphique, c'est-à-dire que le contenu affiché à l'intérieur de la balise n'a pas de formatage particulier si aucune déclaration CSS explicite n'a été déclarée. Son rôle est de signaler la présence d'une date et, à travers l'attribut datetime, rendre disponible la date dans un format compréhensible pour une machine, tandis que le contenu de la balise peut être affiché en fonction des humains. Voici un exemple :
<p>La conférence est prévue pour <time datetime="2014-10-30 18:30:00">jeudi 30 novembre à 18:30</time></p>
Limites du web scraping
Il existe deux types de limites en ce qui concerne la pratique du web scraping :
- Limites techniques
- Limites déontologiques/légales
Limites techniques
Selon la modalité d'extraction choisie (voir plus haut dans la page), différentes restrictions techniques peuvent s'appliquer.
Limites de l'extraction manuelle
Les limites techniques de ce type d'extraction concernent principalement le temps et l'effort nécessaires pour extraire une grande quantité de données. Ce type d'extraction est adéquat pour des informations ciblées et avec des critères de choix qui seraient difficiles à traduire de manière formelle, mais ne s'adapte pas à une recherche systématique.
Limites des extractions automatique et sémi-automatique
Les extractions automatiques et sémi-automatiques sont similaires en ce qui concerne les limites techniques, mais se différencient notamment sur deux plans :
- La taille et le temps d'extraction : la recherche automatique permet d'extraire beaucoup plus d'information et de plusieurs sources en moins de temps
- Le degré d' "envahissement" sur la source de données extraites : la recherche automatique est généralement beaucoup plus chargée en termes d'impact sur les serveurs hébergeant les sites analysés
Dans les deux cas, les limites techniques suivantes peuvent s'appliquer :
- Organisation de l'information inconsistente ou chaotique : l'extraction sémi-automatique ou automatique nécessite l'utilisation de critères d'extraction qui impliques la possibilité d'identifier les informations à retenir par rapport aux informations inutiles aux finalités de l'analyse. L'information d'intérêt pourrait dans ce sens être présentée de manière différente selon le site d'appartenance, ou même au sein du même site (voir à ce propos la section Web scraping et HTML).
- Changement de la structure de l'information : même si des critères adéquats pour l'extraction des informations pertinents sont établis, dans le cadre d'une analyse qui s'étale dans le temps, il y a la possibilité que les sites analysés changent de structure et par conséquent les critères utilisés auparavant ne soient plus valides
- Ce phénomène s'applique surtout aux sites qui utilisent des systèmes de gestion de contenu (e.g. WordPress, mais également Moodle) qui permettent de changer de thème graphique : le changement du thème implique très souvent aussi un changement de la structure de la page
- Accès restreint à la page : certains contenus d'un site sont disponibles exclusivement à travers un système d'authentification (exemple : login). Même s'il existe des outils qui permettent d'émuler un mécanisme de login, il faudrait en tout cas disposer d'un accès et, surtout, fournir ses propres informations d'accès (username et password) à l'outil d'extraction, c'est-à-dire exposer ses propres droits d'accès
- Contenu généré dynamiquement : certaines pages ne téléchargent pas tout le contenu à la première requête, mais intègrent du contenu en fonction des actions du navigateur. Même si certains outils avancés permettent d'émuler des interactions de ce type, dans la plupart des cas, l'analyse est faite sur le contenu HTML disponible lors de la première requête, sans interactions successives.
- Pour analyser le contenu d'une page web il faut la "visiter", c'est-à-dire générer du traffic pour le server qui l'héberge. Ce type de traffic "non humain" n'est souvent pas très bien accepté par les administrateurs des sites qui disposent de quelques instruments techniques pour le limiter :
- Limitation des requêtes dans un délais de temps : les administrateurs peuvent limiter le nombre de "hit" (i.e. les fois que l'on accède à une page spécifique ou à n'importe quelle page sur un même domain) provenant de la même source, justement parce que un navigateur "humain" nécessite normalement d'un certain temps pour passer d'une page à l'autre
- Bloque des adresses IP : si un site reçoit trop de requêtes en même temps, il y a le risque d'enchainer un Denial of Service (DoS), c'est-à-dire que le server ne peut satisfaire toutes les requêtes qu'il reçoit et pour éviter des problèmes il préfère couper les services (ce phénomène est souvent utilisé dans les attaques informatiques). Les administrateur peuvent identifier des adresse IP qui sont la source de nombreuses requêtes et leur empêcher l'accès.
- Limitation de la bande passante : visiter un site signifie télécharger son contenu, ce qui implique la "consommation" de bande passante d'un server. Dans le cas de petit server et hébergement mutualisés, cette bande peut être limitée sur le mois et une fois dépassée, le site n'est plus disponible jusqu'au mois prochain.
- Obligation de saisir des données pour acceder à un contenu : surtout dans le cadre d'ouverture de compte online, les sites demandent de saisir des champs qu'une machine ne peut pas remplir (e.g. saisir le texte tiré d'une image, CAPTCHA, etc.)
En conclusion, il faut être très attentif à l'utilisation de systèmes d'extraction, surtout dans le cas d'une extraction massive et répétée dans le temps.
Limites déontologiques/légales
À présent, le cadre légal qui régule les droits de reproduction du contenu web sont difficilement interprétables même pour les experts du secteur et peuvent varier considérablement selon les pays. Un exemple concerne la reproduction des articles de journaux et magazines online dans des news agregator (site d'agrégation de nouvelles) : est-il suffisant de citer la source de l'article pour pouvoir l'afficher sur un autre site ? D'une part, les droits d'auteurs sont en partie respectés parce que la propriété intellectuelle de l'article est citée ; mais d'autre part les éditions online des journaux ont intérêt à ce que l'article soit lus sur leur site, où il est souvent accompagné de publicité online, plutôt que sur un autre site.
Les problèmes de ce type concernent principalement des situations commerciales, mais même dans le cadre de la recherche certaines "bonnes pratiques" pourraient être adoptées pour éviter des problèmes. Par exemple, il serait bien d'avertir les administrateurs d'un site si on a l'intention d'analyser du contenu présent dans leurs pages. Même s'il s'agit de contenu public et donc il ne faudrait pas d'autorisation formelle, informer les administrateurs du site à un double intérêt :
- D'une part, le fait qu'ils en soient au courant évite le risque de limitation technique (voir plus haut dans la page)
- De l'autre, les administrateurs peuvent vous donner des informations utiles sur des moyens pour analyser le contenu de la page, notamment à travers l'accès à des API (voir plus haut dans la page)
Outils de Web scraping
Il existe plusieurs logiciels et techniques pour faire du web scraping (voir à ce propos Outils text mining). La liste suivante illustre seulement des outils de "bas niveau" (c'est-à-dire qui ne prévoient pas une finalité plus ou moins explicite, mais qui intègrent le scraping dans une logique de programmation plus étendue) :
Outil | Langage | Description |
---|---|---|
rvest | R | Paquet de R qui permet d'importer facilement des données depuis des pages web |
Goutte | PHP | Bibliothèque PHP pour web scraping/crawling |
jQuery | JavaScript | Bibliothèque qui permet, notamment grâce à les requêtes asynchrones (AJAX), de faire du scraping côté client |
Scrapy | Python | Bibliothèque python pour le web scraping/crawling |
Références
- Berners-Lee, T. (2001). The semantic web. Scientific American, 21.
- MacDonald, M. (2013). HTML5 the missing manual (2nd edition.). Sebastopol, CA: O’Reilly.
- McIlraith, S. A., Son, T. C., & Zeng, H. (2001). Semantic web services. IEEE intelligent systems, 16(2), 46-53
- Shadbolt, N., Hall, W., & Berners-Lee, T. (2006). The semantic web revisited. Intelligent Systems, IEEE, 21(3), 96-101.