Extraire des données
d’une page web avec R
François Guillem
Fondateur 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 tests
urlGames <- 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 ?

Extraction données web

  • 1.
    Extraire des données d’unepage web avec R François Guillem Fondateur et data scientist @
  • 2.
    Le Web estla plus grande base de données du monde : — mille milliards de pages ! — plusieurs millions de teraoctets !
  • 3.
    Ce que vousvoyez :
  • 4.
    Ce que voitvotre ordinateur :
  • 5.
    Comment récupérer lesdonnées dans tout ce bazar ?
  • 6.
    Si les donnéessont 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 documenthtml ? <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 lebon 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
  • 19.
    Et maintenant démonstration! Comment récupérer les notes de tous les jeux de Wii U ?