IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Extraction données web fonction XpathSApply


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 18
    Points
    18
    Par défaut Extraction données web fonction XpathSApply
    Bonjour,

    Je suis novice en la matière (tant pour R que pour le web scrapping), mais je dois réaliser une extraction des petites annonces sur le site "leboncoin", et je suis arrivée à un stade où je bloque.

    En réalité, je dois d'abord extraire sur une page du site LBC, la liste des liens http vers le contenu des petites annonces et je souhaite par la suite extraire ce contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    doc <- htmlParse ("http://www.leboncoin.fr/_maison_/offres/ile_de_france/?o=1")
     
    lien <- xpathSApply (doc,
                         "//div[contains(@class,'list-lbc')]/a",
                         xmlGetAttr,
                         name = "href")
     
    # Jusque-là tout va bien, j'ai ma liste d'adresses dans l'objet "lien"#
    #je souhaite réaliser une boucle pour extraire toute les données avec la fonction For#
    v<-NULL
    w<-NULL
    for (i in 1:length(lien)) {
      extracteur<-function(url) 
      lien[i]<-htmlParse(url)
      v[i]<- readHTMLTable(lien[i])
      w[i]<-xpathSApply(lien[i],"//div[contains(@class='AdviewContents']/div[@class='contents']",
                        xmlValue)}
    Et là ça ne marche pas, enfin ça marche lorsque que je récupère seulement "v" qui correspond à l'extraction de données sous forme de table, mais je souhaite récupérer aussi le contenu de la petite annonce sous forme de texte donc l'objet w, là, R me donne l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur dans UseMethod("xpathApply") : 
      pas de méthode pour 'xpathApply' applicable pour un objet de classe "character"
    Et je ne comprends pas parce que l'extraction de ce texte pour une seule annonce fonctionne, mais j'ai l'impression que la boucle ne marche pas...

    Si quelqu'un a une idée je lui en serais vraiment reconnaissante.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Points : 1 189
    Points
    1 189
    Billets dans le blog
    2
    Par défaut
    Tu as quelques bugs dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    v<-NULL
    w<-NULL
    for (i in 1:length(lien)) {
    extracteur<-function(url)
    lien[i]<-htmlParse(url)
    v[i]<- readHTMLTable(lien[i])
    w[i]<-xpathSApply(lien[i],"//div[contains(@class='AdviewContents']/div[@class='contents']",
    xmlValue)}
    Tu définis une fonction ligne 4 sans ouvrir et fermer les parenthèses.

    "//div[contains(@class='AdviewContents']/div[@class='contents']"
    Je ne suis pas sûr que l'expression soit bonne, j'ai aussi un bug dessus. A toi de voir.

    Pourquoi ton code dans la boucle n'est pas le même que celui en introduction ?

    Cordialement.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    Merci de ta réponse.

    En fait pour la question des parenthèses, je les ai supprimées car sinon ça ne calcule rien du tout, je ne sais pas pourquoi, tandis que j'ai fait un test avec le premier calcul seulement et ça me donnait des résultats en appliquant la fonction sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i in 1:length(lien)) {
      extracteur<-function(url) 
      lien[i]<-htmlParse(url)
      v[i]<- readHTMLTable(lien[i])}
    Avec ça j'obtiens une liste pour v .

    Aussi, quand je teste l'autre formule avec xpathSapply mais pour l'extraction d'une seule annonce, la fonction marche sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    docu<-htmlParse("http://www.leboncoin.fr/montres_bijoux/392576046.htm?ca=12_s")
     
    n<-xpathSApply(docu,"//div[contains(@class,'AdviewContent')]//div[@class='content']",
                         xmlValue)
    Donc je me demandais si avec XpathApply, on pouvait insérer une boucle de la forme (lien[i]), peut-être qu'il faut l'écrire sous une autre forme ?

    Pour la boucle je ne comprends pas ce que tu entends, pourquoi je mets "lien" et pas "doc", c'est ça ?

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    En fait, je crois que le problème vient du fait que mon objet "lien" dans la fonction XpathSapply, ne correspond pas à un format HTLMInternalDocument donc une page web, mais c'est une liste de pages web. Il faudrait que je trouve un moyen de le convertir en ce format, si c'est faisable bien sûr..

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    Pour ceux que ça intéresse voila la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (i in 1:length(lien))     {
      v[i]<- readHTMLTable(lien[i])
      w[i]<-xpathSApply(htmlParse(lien[i]),
                        "//div[contains(@class,'AdviewContent')]//div[@class='content']",
                        xmlValue)
                                         }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/10/2013, 14h02
  2. Réponses: 5
    Dernier message: 05/10/2013, 10h09
  3. [XL-2013] Erreur code vba pour "programme extraction données web"
    Par tatamarc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/08/2013, 12h07
  4. VBA code extraction donnée web sans requête donné externe
    Par PowerTrader dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/01/2012, 08h52
  5. Extraction données dans une page WEB
    Par phibrunet dans le forum Excel
    Réponses: 1
    Dernier message: 19/02/2008, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo