SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
GUR FLTAUR :
 Tous premiers pas
 dans le WEB SCRAPING



INSEE – Aurélien D’Isanto

    Nom Prénom
2 mai 2012
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
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
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
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
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
3 – récupération automatique de données insee.fr




7
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
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
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
3 – récupération automatique de données insee.fr
     ## on met en forme sous forme d'arbre
     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 ans

11
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
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

13
3 – récupération automatique de données insee.fr
     ## exemple d'utilisation : 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 –15


14
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
4 – automatisation de recherche sur GOOGLE




16
4 – automatisation de recherche sur GOOGLE
     library(RCurl)
     library(XML)

     ## choix de la recherche
     rech <- "insee"




17
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
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
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
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
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
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

Contenu connexe

Tendances

Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQLAntoine Augusti
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3Amal Abid
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2Amal Abid
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopLilia Sfaxi
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : CassandraLilia Sfaxi
 
Ontology concept et applications
Ontology concept et applicationsOntology concept et applications
Ontology concept et applicationsbenouini rachid
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduceAmal Abid
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataLilia Sfaxi
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDBMongoDB
 
Soutenance mémoire de fin d'études
Soutenance mémoire de fin d'étudesSoutenance mémoire de fin d'études
Soutenance mémoire de fin d'étudesFabrice HAUHOUOT
 
Installation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidInstallation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidAmal Abid
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1Amal Abid
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceLilia Sfaxi
 
Introduction à la Business Intelligence
Introduction à la Business Intelligence Introduction à la Business Intelligence
Introduction à la Business Intelligence Cynapsys It Hotspot
 
Session découverte de la Data Virtualization
Session découverte de la Data VirtualizationSession découverte de la Data Virtualization
Session découverte de la Data VirtualizationDenodo
 

Tendances (20)

Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQL
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
 
Une Introduction à Hadoop
Une Introduction à HadoopUne Introduction à Hadoop
Une Introduction à Hadoop
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : Cassandra
 
Ontology concept et applications
Ontology concept et applicationsOntology concept et applications
Ontology concept et applications
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
 
Chapitre 2 hadoop
Chapitre 2 hadoopChapitre 2 hadoop
Chapitre 2 hadoop
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
 
Chapitre i-intro
Chapitre i-introChapitre i-intro
Chapitre i-intro
 
Construisez votre première application MongoDB
Construisez votre première application MongoDBConstruisez votre première application MongoDB
Construisez votre première application MongoDB
 
Soutenance mémoire de fin d'études
Soutenance mémoire de fin d'étudesSoutenance mémoire de fin d'études
Soutenance mémoire de fin d'études
 
Big data
Big dataBig data
Big data
 
Installation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidInstallation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abid
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1
 
BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-Reduce
 
Introduction à la Business Intelligence
Introduction à la Business Intelligence Introduction à la Business Intelligence
Introduction à la Business Intelligence
 
Partie2BI-DW2019
Partie2BI-DW2019Partie2BI-DW2019
Partie2BI-DW2019
 
Session découverte de la Data Virtualization
Session découverte de la Data VirtualizationSession découverte de la Data Virtualization
Session découverte de la Data Virtualization
 

En vedette

Introduction à la cartographie avec R
Introduction à la cartographie avec RIntroduction à la cartographie avec R
Introduction à la cartographie avec RCdiscount
 
Exports de r vers office
Exports de r vers officeExports de r vers office
Exports de r vers officefrancoismarical
 
Incorporer du C dans R, créer son package
Incorporer du C dans R, créer son packageIncorporer du C dans R, créer son package
Incorporer du C dans R, créer son packageCdiscount
 
R aux enquêtes de conjoncture
R aux enquêtes de conjonctureR aux enquêtes de conjoncture
R aux enquêtes de conjoncturefrancoismarical
 
Fltau r interface
Fltau r interfaceFltau r interface
Fltau r interfaceCdiscount
 
Parallel R in snow (english after 2nd slide)
Parallel R in snow (english after 2nd slide)Parallel R in snow (english after 2nd slide)
Parallel R in snow (english after 2nd slide)Cdiscount
 
Dataiku r users group v2
Dataiku   r users group v2Dataiku   r users group v2
Dataiku r users group v2Cdiscount
 
RStudio is good for you
RStudio is good for youRStudio is good for you
RStudio is good for youCdiscount
 
Cartographie avec igraph sous R (Partie 2)
Cartographie avec igraph sous R (Partie 2)Cartographie avec igraph sous R (Partie 2)
Cartographie avec igraph sous R (Partie 2)Cdiscount
 
Cartographie avec igraph sous R (Partie 1)
Cartographie avec igraph sous R (Partie 1) Cartographie avec igraph sous R (Partie 1)
Cartographie avec igraph sous R (Partie 1) Cdiscount
 
Première approche de cartographie sous R
Première approche de cartographie sous RPremière approche de cartographie sous R
Première approche de cartographie sous RCdiscount
 
Comptabilité Nationale avec R
Comptabilité Nationale avec RComptabilité Nationale avec R
Comptabilité Nationale avec RCdiscount
 
R fait du la tex
R fait du la texR fait du la tex
R fait du la texCdiscount
 
R2DOCX : R + WORD
R2DOCX : R + WORDR2DOCX : R + WORD
R2DOCX : R + WORDCdiscount
 
Presentation r markdown
Presentation r markdown Presentation r markdown
Presentation r markdown Cdiscount
 

En vedette (20)

Introduction à la cartographie avec R
Introduction à la cartographie avec RIntroduction à la cartographie avec R
Introduction à la cartographie avec R
 
HADOOP + R
HADOOP + RHADOOP + R
HADOOP + R
 
Exports de r vers office
Exports de r vers officeExports de r vers office
Exports de r vers office
 
Incorporer du C dans R, créer son package
Incorporer du C dans R, créer son packageIncorporer du C dans R, créer son package
Incorporer du C dans R, créer son package
 
R aux enquêtes de conjoncture
R aux enquêtes de conjonctureR aux enquêtes de conjoncture
R aux enquêtes de conjoncture
 
Fltau r interface
Fltau r interfaceFltau r interface
Fltau r interface
 
Parallel R in snow (english after 2nd slide)
Parallel R in snow (english after 2nd slide)Parallel R in snow (english after 2nd slide)
Parallel R in snow (english after 2nd slide)
 
Dataiku r users group v2
Dataiku   r users group v2Dataiku   r users group v2
Dataiku r users group v2
 
R in latex
R in latexR in latex
R in latex
 
Big data with r
Big data with rBig data with r
Big data with r
 
RStudio is good for you
RStudio is good for youRStudio is good for you
RStudio is good for you
 
Cartographie avec igraph sous R (Partie 2)
Cartographie avec igraph sous R (Partie 2)Cartographie avec igraph sous R (Partie 2)
Cartographie avec igraph sous R (Partie 2)
 
Cartographie avec igraph sous R (Partie 1)
Cartographie avec igraph sous R (Partie 1) Cartographie avec igraph sous R (Partie 1)
Cartographie avec igraph sous R (Partie 1)
 
Première approche de cartographie sous R
Première approche de cartographie sous RPremière approche de cartographie sous R
Première approche de cartographie sous R
 
Comptabilité Nationale avec R
Comptabilité Nationale avec RComptabilité Nationale avec R
Comptabilité Nationale avec R
 
Gur1009
Gur1009Gur1009
Gur1009
 
R fait du la tex
R fait du la texR fait du la tex
R fait du la tex
 
R2DOCX : R + WORD
R2DOCX : R + WORDR2DOCX : R + WORD
R2DOCX : R + WORD
 
Presentation r markdown
Presentation r markdown Presentation r markdown
Presentation r markdown
 
R versur Python
R versur PythonR versur Python
R versur Python
 

Similaire à Premier pas de web scrapping avec R

Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaPatrick Allaert
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPrestaShop
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015Rodolphe Quiédeville
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correctionInes Ouaz
 
Stratégie et veille : Extraire et trier des données en ligne
Stratégie et veille : Extraire et trier des données en ligneStratégie et veille : Extraire et trier des données en ligne
Stratégie et veille : Extraire et trier des données en ligneErwan Tanguy
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSRenaud Dumont
 
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...iProspect France
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQLBruno Bonnin
 
Evolutions et nouveaux outils SEO
Evolutions et nouveaux outils SEOEvolutions et nouveaux outils SEO
Evolutions et nouveaux outils SEODimitri Brunel
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement webHouda TOUKABRI
 
Introduction à Sinatra
Introduction à SinatraIntroduction à Sinatra
Introduction à SinatraRémi Prévost
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniterAtsé François-Xavier KOBON
 
Synchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplementSynchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplementgplanchat
 
Seocamp Nantes 2011 : CMS Open-Source Drupal
Seocamp Nantes 2011 : CMS Open-Source Drupal Seocamp Nantes 2011 : CMS Open-Source Drupal
Seocamp Nantes 2011 : CMS Open-Source Drupal olivierpierre
 

Similaire à Premier pas de web scrapping avec R (20)

Monitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et PinbaMonitoring d'applications/environnements PHP: APM et Pinba
Monitoring d'applications/environnements PHP: APM et Pinba
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
Stratégie et veille : Extraire et trier des données en ligne
Stratégie et veille : Extraire et trier des données en ligneStratégie et veille : Extraire et trier des données en ligne
Stratégie et veille : Extraire et trier des données en ligne
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
 
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...
 
Stream processing et SQL
Stream processing et SQLStream processing et SQL
Stream processing et SQL
 
Evolutions et nouveaux outils SEO
Evolutions et nouveaux outils SEOEvolutions et nouveaux outils SEO
Evolutions et nouveaux outils SEO
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
Retour d'expérience sur PowerShell
Retour d'expérience sur PowerShellRetour d'expérience sur PowerShell
Retour d'expérience sur PowerShell
 
Introduction à Sinatra
Introduction à SinatraIntroduction à Sinatra
Introduction à Sinatra
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
Cours php bac info
Cours php bac infoCours php bac info
Cours php bac info
 
Synchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplementSynchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplement
 
Seocamp Nantes 2011 : CMS Open-Source Drupal
Seocamp Nantes 2011 : CMS Open-Source Drupal Seocamp Nantes 2011 : CMS Open-Source Drupal
Seocamp Nantes 2011 : CMS Open-Source Drupal
 

Plus de Cdiscount

Paris2012 session4
Paris2012 session4Paris2012 session4
Paris2012 session4Cdiscount
 
Paris2012 session3b
Paris2012 session3bParis2012 session3b
Paris2012 session3bCdiscount
 
Scm prix blé_2012_11_06
Scm prix blé_2012_11_06Scm prix blé_2012_11_06
Scm prix blé_2012_11_06Cdiscount
 
Scm indicateurs prospectifs_2012_11_06
Scm indicateurs prospectifs_2012_11_06Scm indicateurs prospectifs_2012_11_06
Scm indicateurs prospectifs_2012_11_06Cdiscount
 
State Space Model
State Space ModelState Space Model
State Space ModelCdiscount
 
Paris2012 session2
Paris2012 session2Paris2012 session2
Paris2012 session2Cdiscount
 
Paris2012 session1
Paris2012 session1Paris2012 session1
Paris2012 session1Cdiscount
 
Prévisions trafic aérien
Prévisions trafic aérienPrévisions trafic aérien
Prévisions trafic aérienCdiscount
 
Robust sequentiel learning
Robust sequentiel learningRobust sequentiel learning
Robust sequentiel learningCdiscount
 
Prediction of Quantiles by Statistical Learning and Application to GDP Foreca...
Prediction of Quantiles by Statistical Learning and Application to GDP Foreca...Prediction of Quantiles by Statistical Learning and Application to GDP Foreca...
Prediction of Quantiles by Statistical Learning and Application to GDP Foreca...Cdiscount
 
Prévision de consommation électrique avec adaptive GAM
Prévision de consommation électrique avec adaptive GAMPrévision de consommation électrique avec adaptive GAM
Prévision de consommation électrique avec adaptive GAMCdiscount
 
Forecasting GDP profile with an application to French Business Surveys
Forecasting GDP profile with an application to French Business SurveysForecasting GDP profile with an application to French Business Surveys
Forecasting GDP profile with an application to French Business SurveysCdiscount
 
Prediction in dynamic Graphs
Prediction in dynamic GraphsPrediction in dynamic Graphs
Prediction in dynamic GraphsCdiscount
 

Plus de Cdiscount (15)

R Devtools
R DevtoolsR Devtools
R Devtools
 
Paris2012 session4
Paris2012 session4Paris2012 session4
Paris2012 session4
 
Paris2012 session3b
Paris2012 session3bParis2012 session3b
Paris2012 session3b
 
Scm prix blé_2012_11_06
Scm prix blé_2012_11_06Scm prix blé_2012_11_06
Scm prix blé_2012_11_06
 
Scm indicateurs prospectifs_2012_11_06
Scm indicateurs prospectifs_2012_11_06Scm indicateurs prospectifs_2012_11_06
Scm indicateurs prospectifs_2012_11_06
 
Scm risques
Scm risquesScm risques
Scm risques
 
State Space Model
State Space ModelState Space Model
State Space Model
 
Paris2012 session2
Paris2012 session2Paris2012 session2
Paris2012 session2
 
Paris2012 session1
Paris2012 session1Paris2012 session1
Paris2012 session1
 
Prévisions trafic aérien
Prévisions trafic aérienPrévisions trafic aérien
Prévisions trafic aérien
 
Robust sequentiel learning
Robust sequentiel learningRobust sequentiel learning
Robust sequentiel learning
 
Prediction of Quantiles by Statistical Learning and Application to GDP Foreca...
Prediction of Quantiles by Statistical Learning and Application to GDP Foreca...Prediction of Quantiles by Statistical Learning and Application to GDP Foreca...
Prediction of Quantiles by Statistical Learning and Application to GDP Foreca...
 
Prévision de consommation électrique avec adaptive GAM
Prévision de consommation électrique avec adaptive GAMPrévision de consommation électrique avec adaptive GAM
Prévision de consommation électrique avec adaptive GAM
 
Forecasting GDP profile with an application to French Business Surveys
Forecasting GDP profile with an application to French Business SurveysForecasting GDP profile with an application to French Business Surveys
Forecasting GDP profile with an application to French Business Surveys
 
Prediction in dynamic Graphs
Prediction in dynamic GraphsPrediction in dynamic Graphs
Prediction in dynamic Graphs
 

Premier pas de web scrapping avec R

  • 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
  • 7. 3 – récupération automatique de données insee.fr 7
  • 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
  • 11. 3 – récupération automatique de données insee.fr ## on met en forme sous forme d'arbre 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 ans 11
  • 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
  • 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 13
  • 14. 3 – récupération automatique de données insee.fr ## exemple d'utilisation : 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 –15 14
  • 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 GOOGLE 16
  • 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