Extraction données web

Preview:

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 ?

Citation preview

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

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

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

Ce que vous voyez :

Ce que voit votre ordinateur :

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

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]]

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)

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, ...)

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

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">

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">

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 »

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 »

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 »

Les sélecteurs CSS

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

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

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 »

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

Et maintenant démonstration !

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