Extraction données web

19
Extraire des données d’une page web avec R François Guillem Fondateur et data scientist @

description

Présentation par François Guillem pour le meetup Paris R Addicts du 9 Juillet 2013. Comment extraire automatiquement des données d'une page web à l'aide de R ?

Transcript of Extraction données web

Page 1: Extraction données web

Extraire des données d’une page web avec RFrançois GuillemFondateur et data scientist @

Page 2: Extraction données web

Le Web est la plus grande base de données du monde :

— mille milliards de pages !— plusieurs millions de teraoctets !

Page 3: Extraction données web

Ce que vous voyez :

Page 4: Extraction données web

Ce que voit votre ordinateur :

Page 5: Extraction données web

Comment récupérer les données dans tout ce bazar ?

Page 6: Extraction données web

Si les données sont dans un tableau

• readHTMLtable du package XML

library(XML)

url <- "http://www.jeuxvideo.com/articles/listes/tests-wiiu-type-0-note-0-tri-0-0.htm"

tables <- readHTMLTable(url)

# la fonction renvoie une liste contenant tous les tableaux# de la page y compris des tableaux invisibles.# Il est bon de vérifier leur taille afin d'identifier# celui qui vous intéresse

lapply(tables, dim)

tables[[3]]

Page 7: Extraction données web

Et sinon ?

• Utiliser le package CSS (dont je suis l’auteur !)

install.packages("CSS")library(CSS)

url <- "http://www.jeuxvideo.com/articles/listes/tests-wiiu-type-0-note-0-tri-0-0.htm"

doc <- htmlParse(url)

# Récupérer les url des testsurlGames <- cssApply(doc, "td > p > a", cssLink)

Page 8: Extraction données web

Explications

• doc : document html créé avec « htmlParse »

• path : où se trouvent les données à extraire dans le document ? (sélecteur CSS)

• fun : fonction pour extraire les données : cssCharacter, cssNumeric, cssLink

cssApply(doc, path, fun, ...)

Page 9: Extraction données web

Qu’est-ce qu’un document html ?

<html>

<head>

<title>Titre de la page</title>

</head>

<body>

<div>

<h1>Section 1</h1>

<p>texte</p>

</div>

<div>

<h1>Section 2</h1>

<p>texte</p>

</div>

</body>

</html>

html

head

body

div

div

Titre de la pagetitle

Section 1h1

textep

Section 2h1

textep

Page 10: Extraction données web

Les attributs

• Chaque élément a un nom qui indique sa fonction (html, head, body, div, etc.)

• Les attributs contiennent des infos additionnelles :

<div attr1="valeur1" attr2="valeur2">

Page 11: Extraction données web

Les principaux attributs

• « id » : nom unique qui identifie l’élément

• « class » : utile pour savoir ce que contient un élément

<div id="leftColumn">

<div class="article">

<div id="header">

<span class="note bignum">

Page 12: Extraction données web

Les sélecteurs CSS

• el : éléments de type « el »

• el1 el2 : éléments « el2 » contenus dans des « el1 »

• el1>el2 : éléments « el2 » directement contenus dans des « el1 »

Page 13: Extraction données web

Les sélecteurs CSS

• el.class : éléments « el » de classe « class »

• el.class1.class2 : éléments « el » de classes « class1 » et « class2 »

• el#id : élément « el » ayant l’id « id »

Page 14: Extraction données web

Les sélecteurs CSS

• * : n’importe quel élément

• .class : n’importe quel élement de classe « class »

• #id : n’importe quel élément ayant l’id « id »

Page 15: Extraction données web

Les sélecteurs CSS

• *[attr] : éléments possédant l’attribut « attr »

• *[attr='value'] : éléments dont l’attribut « attr » est égal à « value »

Page 16: Extraction données web

Exemples

• "td > p > a"« a » directement contenus par des « p » qui sont directement contenus par des « td »

• "#avis_auteur li.note > strong"« strong » directement contenus dans des « li » de classe « note » contenus dans l’élément ayant l’ID « avis_auteur »

Page 17: Extraction données web

Comment trouver le bon chemin ?

• Dans Chrome, clic droit sur la donnée, puis « procéder à l’inspection de l’élément »

• Un cadre s’ouvre et tout en bas du cadre se trouve le chemin complet vers l’élément qui contient la donnée

• Essayer de ne garder que les éléments utiles de ce chemin

Page 18: Extraction données web
Page 19: Extraction données web

Et maintenant démonstration !

Comment récupérer les notes de tous les jeux de Wii U ?