Retour expérience Agilité & Données fonction finances risques - Agile Tour Lille 2013
Extraction données web
-
Upload
parisraddicts -
Category
Education
-
view
1.302 -
download
0
description
Transcript of Extraction données web
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 ?