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 ?
6. 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]]
7. 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 tests
urlGames <- cssApply(doc, "td > p > a", cssLink)
8. 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, ...)
9. 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
10. 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">
11. 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">
12. 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 »
13. 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 »
14. 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 »
15. Les sélecteurs CSS
• *[attr] : éléments possédant l’attribut « attr »
• *[attr='value'] : éléments dont l’attribut « attr »
est égal à « value »
16. 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 »
17. 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