1. GUR FLTAUR :
Tous premiers pas
dans le WEB SCRAPING
INSEE – Aurélien D’Isanto
Nom Prénom
2 mai 2012
2. Plan
1 – le Web Scraping, c’est quoi
2 – les outils disponibles de Web Scraping sous R
3 – ex 1 : récupération automatique de données insee.fr
4 – ex 2 : automatisation de recherche sur GOOGLE
5 – pour finir …
2
3. 1 – le Web Scraping, c’est quoi
Extraction de données d’un site Internet à partir de
programmes informatiques pour :
retraiter et/ou les remettre en forme
les analyser
les rediffuser sous une autre forme
éventuellement les utiliser à des fins commerciales
Envoi de données vers un site Internet à partir de scripts pour :
Remplir automatiquement des formulaires
Automatiser des tâches Internet
3
4. 1 – le Web Scraping, c’est quoi
Comment : écrire un programme informatique
implémentant un grand nombre de requêtes de
« dialogue » de type client/serveur (download, upload, …)
Le client étant le programme
Et le serveur étant le site Internet d’intérêt représenté par
son URL
Conseillé d’avoir des notions de base en HTML/XML
puisque l’on récupère/envoie des données en HTML
4
5. 2 – les outils disponibles de Web Scraping sous R
Package Rcurl
Package de base pour le dialoguer avec des URL
Simplement une interface du logiciel LIBCURL
Extraire les informations d’entête du code source HTML d’une
URL et extraire le contenu d’une URL (i.e. son code source
HTML) : getURLContent et getURL
Récupérer les paramètres d’un formulaire WEB :
getFormParams
Remplir un formulaire : getForm et postForm
Package scrapeR
Package d’une fonction très paramétrable (scrape) pour extraire
des données de sites WEB en grande quantité
5
6. 2 – les outils disponibles de Web Scraping sous R
Package XML
Package d’outil très utiles de traitement d’objets HTML/XML
Indispensable pour l’extraction de données de sites WEB puisque
les sorties brutes sont de l’HTML brut …
Fonction htmlTreeParse et XmlTreeParse : rendre « user-friendly »
les sorties brutes des fonctions de Rcurl et scrapeR, en indentant
correctement les balises
Fonction readHTMLTable : extrait uniquement les tableaux d’une
document HTML (URL ou document en local) et les met dans un
format très « user-friendly »
Package stringr
Contient des fonctions très utiles pour extraire des chaînes de
caractères
Notamment str_locate_all : renvoie toutes les positions auxquelles
on trouve une expression donnée dans une chaîne de caractères
6
8. 3 – récupération automatique de données insee.fr
library(scrapeR)
library(RCurl)
library(XML)
## préalable : aller sur le site insee.Fr voir comment
## sont construits les noms des URL des informations rapides
## on découpe l'URL pour la paramétrer efficacement
urlfixe_partie1 <-"http://www.insee.fr/fr/themes/info-rapide.asp?id="
id <- "11"
urlfixe_partie2 <-"&date="
datePubli <- "20120423«
paste(urlfixe_partie1,id,urlfixe_partie2,datePubli,sep="")
"http://www.insee.fr/fr/themes/info-rapide.asp?
id=11&date=20120423"
8
9. 3 – récupération automatique de données insee.fr
## on extrait le code source HTML de l'URL recomposée
pageSource <-
scrape( url=paste(urlfixe_partie1,id,urlfixe_partie2,datePubli,sep=""),
follow=TRUE,
headers=TRUE,
parse=FALSE,
verbose=TRUE)
pageSource
Extrait de pageSource :
Stocks</td>rn<td class="tab-chiffre"> 11</td>rn<td
class="tab-chiffre"> 13</td>
9
10. 3 – récupération automatique de données insee.fr
## alternative :
pageSource_alternative <-
getURL(paste(urlfixe_partie1,id,urlfixe_partie2,datePubli,sep=""))
pageSource_alternative
10
12. 3 – récupération automatique de données insee.fr
## on peut aussi récupérer en une seule ligne de code tous les tableaux
## d'une page web et les mettre en forme en matrice
tableaux <-
readHTMLTable(paste(urlfixe_partie1,id,urlfixe_partie2,datePubli,sep=""))
## la fonction crée autant d'éléments qu'il y a de tableaux (ici 2)
## on accède aux valeurs comme pour une matrice
## pratique si l'on veut reconstruire un tableau de bord personnalisé
## de la situation conjoncturelle à partir des nombreux tableaux insee
## disponibles chaque mois ! Pour cela, une fois les tableaux récupérés, on
## extrait les données d'intérêt des tableaux et on les met en forme
tableaux
12
17. 4 – automatisation de recherche sur GOOGLE
library(RCurl)
library(XML)
## choix de la recherche
rech <- "insee"
17
18. 4 – automatisation de recherche sur GOOGLE
## on effectue quelconque une recherche sur google
## puis on copie l'URL résultat en paramètre d'entrée
## de la fonction getFormParams
## en sortie de la fonction, on obtient les paramètres
## du formulaire de la recherche GOOGLE
param <- getFormParams("http://www.google.com/search?
hl=en&lr=&ie=ISO-8859-1&q=insee&btnG=Search")
Param
hl lr ie q btnG
"en" "" "ISO-8859-1" "insee" "Search"
18
19. 4 – automatisation de recherche sur GOOGLE
## récupération manuelle ou automatique des paramètres
## ici manuelle car peu nombreux
## puis la fonction getForm nous permet de changer à loisir les paramètres
## pour la recherche GOOGLE, seul le paramètre q doit être changé
## en sortie de getForm : de contenu HTML brut de l'URL formée
## la concaténation des informations en entrée
res_rech <- getForm("http://www.google.com/search",
hl="en",
lr="",
ie="ISO-8859-1",
q=rech,
btnG="Search")
19
20. 4 – automatisation de recherche sur GOOGLE
## on rend "user-friendly" la sortie précédente
## en affichant le code HTML sous forme d'arbre
res_rech_mef <- htmlTreeParse(res_rech, asText = TRUE)
## on peut rendre le résultat encore plus user-friendly
## en convertissant les caractères mal affichés (non ASCII)
## on repère alors dans l'arbre les infos qui nous interessent :
## titres des premiers résultats ? nombre de résultats ? ...
## et on automatise ainsi une extraction de résultats de recherche
## Lorsque l'on applique des fonctions d'extraction de chaînes de
## caractères sur le résultat HTML, il vaut mieux le faire sur
## le code source brut et non celui mis en forme par la fonction htmlTreeParse
20
21. 4 – automatisation de recherche sur GOOGLE
Extrait1 de res_rech_mef
<div style="float:right">
<a class="fl" href="/advanced_search?
q=insee&hl=en&lr=&ie=UTF-8&prmd=ivnsl">Advanced search
</a>
</div>
<div>About 20,500,000 results</div>
</div>
Extrait 2 de res_rech_mef
<h3 class="r">
<a href="/url?
q=http://www.insee.fr/en/default.asp&sa=U&ei=CMqgT7iMEoPqOZj8tfMI&ved
=0CB8QFjAA&usg=AFQjCNEt5-wN51BxzoDxRFTqDzW-a0xRmQ">
<b>INSEE </b> - National Institute of Statistics and Economic Studies - France
</a>
</h3>
21
22. 5 – Pour finir …
Un très grand nombre de possibilités :
RCurl semble aussi pouvoir gérer le protocole HTTPS
Marketing ciblé en obtenant des informations sur les personnes
via des réseaux sociaux
Construction de Bases de données par Wikipédia
Difficultés principales pour automatiser : comprendre le
nommage des URL propre à chaque site et retraiter le code
source HTML …
Mais une image très mitigée …
parfois vu comme du pillage d’Internet
les « robots » remplisseurs de formulaire vus comme nuisibles en
terme de surcharge des serveurs
attention aux droits d’auteur …
Détournement d’informations personnelles à des fins lucratives
…
22
23. Pour en savoir plus
http://curl.haxx.se/ : informations sur le logiciel source sur
lequel s’appuient les packages de web scraping de R
Voir les manuels (sur le site du CRAN) des packages
mentionnés dans la présentation
http://www.omegahat.org/RCurl/ : page personnelle du
package RCurl
23