Web scraping

De EduTech Wiki
Aller à la navigation Aller à la recherche

Cet article est une ébauche à compléter. Une ébauche est une entrée ayant un contenu (très) maigre et qui a donc besoin d'un auteur.

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, qui est connu sous le nom de web crawling. Le web scraping se différencie cependant du web crawling pour ses finalités liées au data-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 (e.g. Netvibes)
  • Recherche académique : le web est une ressource de données qui concernent plusieurs domaines et le grand nombre de données disponibles permettent, parfois, de combler les biais méthodologiques liées aux informations disponibles dans le web (véridicité, authenticité, etc.)
  • Utilisation commerciale : comparaison entre informations disponibles entre sites concurrents (e.g. billets d'avion de différentes compagnie pour le même trajet)
  • Analyse marketing : les "traces" laisé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 analyse 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.

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 sémi-automatique il est nécessaire d'identifier dans les documents analysés les données d'intérêt afin de le 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 à un 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éfinit dans l'expression régulière. Le mécanisme consiste à rechercher toutes les ressemblances entre la chaîne des caractères à trouver (le pattern) à l'intérieur du contenu cible de l'analyse. Les expressions régulières sont une techniques très puissante d'extraction de contenu car elles s'appliquent indépendamment de la structure du document analysé. Cette puissance nécessite cependant d'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 d'une structure du document très précise, ce qui n'est pas forcément le cas dans le pages HTML (voir plus bas dans la section HTML et web scraping).

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érents 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).

Web scraping et web sémantique

(Section à completer...)

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 (i.e. de documents) créé 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) ou XML. Ce même Wiki dispose par exemple d'une API
  • Les RSS : les "really simple syndacation" sont 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 acceder 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 à ce 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 une certaine ordre dans l'ouverture et fermeture des balises. De plus, les producteurs des navigateurs web n'ont jamais vraiment adhéré aux standards plus stricte 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 du tentative de renforcer les standards dans la version XHTML 2.0. À la place de continuer dans le sciage du XHTML, le W3C a décidé plutôt de poursuivre un projet alternative, appelé HTML5. À la base de cette nouvelle version du langage il y a un changement de paradigme radical :

  • Le HTML a été pour longtemps 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 gros on utilisait la balise b, pour une liste à pouce la combinaison ul > 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 balises 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 (i.e. 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érents ressources disponibles, le contenu principale de la page (c'est-à-dire ce qui la rend "unique" rap rapport aux autres pages du site), et ainsi de suite. Avant l'introduction de balises spécifiques en HTML, les développeurs utilisé pour chacun des ses éléments récurrents une balise div à laquelle ils associaient une classe souvent avec une relation sémantique avec le contenu, par exemple <vode>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 class (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 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 una machine, tandis que le contenu de la balise peut être affiché en fonction des humains. Voici un exemple :

<p>La conférence sur le web sémantique est prévue pour <time datetime="2014-10-30 18:30:00">jeudi 30 novembre à 18:30</time></p>