Premier pas de web scrapping avec R

  • 5,383 views
Uploaded on

Aurélien D'Isanto (INSEE)

Aurélien D'Isanto (INSEE)

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
5,383
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
56
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. GUR FLTAUR : Tous premiers pas dans le WEB SCRAPINGINSEE – Aurélien D’Isanto Nom Prénom2 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 Internet3
  • 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 HTML4
  • 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ères6
  • 7. 3 – récupération automatique de données insee.fr7
  • 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 lURL 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 lURL 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_alternative10
  • 11. 3 – récupération automatique de données insee.fr ## on met en forme sous forme darbre pageSource_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 ans11
  • 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 ## dune 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 quil y a de tableaux (ici 2) ## on accède aux valeurs comme pour une matrice ## pratique si lon 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 dintérêt des tableaux et on les met en forme tableaux12
  • 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] –2013
  • 14. 3 – récupération automatique de données insee.fr ## exemple dutilisation : analyse des révisions des enquêtes de conjoncture mois_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 –1514
  • 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"15
  • 16. 4 – automatisation de recherche sur GOOGLE16
  • 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 lURL résultat en paramètre dentré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 lURL 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 darbre 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 larbre 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 lon applique des fonctions dextraction 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 htmlTreeParse20
  • 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 RCurl23