premier pas de web scrapping avec r

23
Nom Prénom INSEE – Aurélien D’Isanto 2 mai 2012 GUR FLTAUR : Tous premiers pas dans le WEB SCRAPING

Upload: cornec

Post on 30-Jun-2015

6.036 views

Category:

Documents


4 download

DESCRIPTION

Aurélien D'Isanto (INSEE)

TRANSCRIPT

Page 1: Premier pas de  web scrapping avec R

Nom Prénom

INSEE – Aurélien D’Isanto

2 mai 2012

GUR FLTAUR : Tous premiers pas dans le WEB SCRAPING

Page 2: Premier pas de  web scrapping avec R

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 …

Page 3: Premier pas de  web scrapping avec R

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

Page 4: Premier pas de  web scrapping avec R

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

Page 5: Premier pas de  web scrapping avec R

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é

Page 6: Premier pas de  web scrapping avec R

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

Page 7: Premier pas de  web scrapping avec R

7

3 – récupération automatique de données insee.fr

Page 8: Premier pas de  web scrapping avec R

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

Page 9: Premier pas de  web scrapping avec R

9

3 – récupération automatique de données insee.fr

## on extrait le code source HTML de l'URL recomposéepageSource <- scrape( url=paste(urlfixe_partie1,id,urlfixe_partie2,datePubli,sep=""), follow=TRUE, headers=TRUE, parse=FALSE, verbose=TRUE)pageSource

Extrait de pageSource :

Stocks</td>\r\n<td class=\"tab-chiffre\"> 11</td>\r\n<td class=\"tab-chiffre\"> 13</td>

Page 10: Premier pas de  web scrapping avec R

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

Page 11: Premier pas de  web scrapping avec R

11

3 – récupération automatique de données insee.fr

## on met en forme sous forme d'arbrepageSource_mf <- htmlTreeParse(pageSource, asText = TRUE)

pageSource_mf

<tr> <td class="TexteTetiere etendue-ligne">Production passée</td> <td class="tab-chiffre">7</td> <td class="tab-chiffre">0</td> <td class="tab-chiffre">19</td> <td class="tab-chiffre">26</td>

</tr>

## ainsi on peut chercher les balises correspondant à ce qui nous interessent## et automatiser une opération : par ex, récupérer tous les ## titres des informations rapides des enquêtes de conj depuis 2 ans

Page 12: Premier pas de  web scrapping avec R

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

Page 13: Premier pas de  web scrapping avec R

13

3 – récupération automatique de données insee.fr

Tableaux

$tableau1

Soldes d’opinion, en % CVS NA NA NA NA NA 1 Industrie manufacturière Moy (1) Janv. 12 Fév. 12 Mars 12 Avril 12 2 Indicateur synthétique (2) 100 92 93 98 95 3 Production passée 5 –6 –7 –8 –2 4 Stocks 13 16 14 11 10 5 Carnets de commandes globaux –17 –28 –26 –20 –23 6 Carnets de commandes étrangers –12 –26 –33 –10 –24 7 Perspectives personnelles de production 5 –5 –1 8 –4 8 Perspectives générales de production –8 –36 –27 –15 –14

tableaux$tableau2[5,5]

[1] –20

Page 14: Premier pas de  web scrapping avec R

14

3 – récupération automatique de données insee.fr

## exemple d'utilisation : analyse des révisions des enquêtes de conjoncturemois_revision <- "mars 2012"datePubli_moisprec <- "20120323"tableaux_moisprec <- readHTMLTable(paste(urlfixe_partie1,id,urlfixe_partie2,datePubli_moisprec,sep=""))

tableaux_moisprec

$tableau1 Soldes d’opinion, en % CVS NA NA NA NA NA 1 Industrie manufacturière Moy (1) Déc. 11 Janv. 12 Fév. 12 Mars 12 2 Indicateur synthétique (2) 100 94 92 93 96 3 Production passée 5 –5 –6 –7 –10 4 Stocks 13 15 16 14 9 5 Carnets de commandes globaux –17 –26 –28 –26 –23 6 Carnets de commandes étrangers –12 –20 –26 –33 –15 7 Perspectives personnelles de production 5 –1 –5 –1 6 8 Perspectives générales de production –8 –36 –36 –27 –15

Page 15: Premier pas de  web scrapping avec R

15

3 – récupération automatique de données insee.fr

rev_tableau1 <- paste(mois_revision, "- révision de", tableaux$tableau1[,1],":", tableaux$tableau1[,5],"/", tableaux_moisprec$tableau1[,6])

rev_tableaux1_mf<-rev_tableau1[2:8]

rev_tableaux1_mf

[1] "mars 2012 - révision de Indicateur synthétique (2) : 98 / 96" [2] "mars 2012 - révision de Production passée : –8 / –10" [3] "mars 2012 - révision de Stocks : 11 / 9" [4] "mars 2012 - révision de Carnets de commandes globaux : –20 / –23" [5] "mars 2012 - révision de Carnets de commandes étrangers : –10 / –15" [6] "mars 2012 - révision de Persp. personnelles de production : 8 / 6" [7] "mars 2012 - révision de Persp. générales de production : –15 / –15"

Page 16: Premier pas de  web scrapping avec R

16

4 – automatisation de recherche sur GOOGLE

Page 17: Premier pas de  web scrapping avec R

17

4 – automatisation de recherche sur GOOGLE

library(RCurl)library(XML)

## choix de la rechercherech <- "insee"

Page 18: Premier pas de  web scrapping avec R

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

Page 19: Premier pas de  web scrapping avec R

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éeres_rech <- getForm("http://www.google.com/search", hl="en", lr="", ie="ISO-8859-1", q=rech, btnG="Search")

Page 20: Premier pas de  web scrapping avec R

20

4 – automatisation de recherche sur GOOGLE

## on rend "user-friendly" la sortie précédente## en affichant le code HTML sous forme d'arbreres_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

Page 21: Premier pas de  web scrapping avec R

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>

Page 22: Premier pas de  web scrapping avec R

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 …

Page 23: Premier pas de  web scrapping avec R

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