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 du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2011
    Messages : 68
    Points : 45
    Points
    45
    Par défaut Extraction données web fonction XpathSApply
    Bonjour à tous.

    Je fait appel à vous car je n'arrive pas à résoudre une erreur sur un code.
    Je précise que je suis novice en programmation.

    Aujourd'hui je cherche à extraire des données d'un site web.
    Je me suis tourné ver le langage R car pour un novice comme moi cela ma paru plus simple car interprété.

    J'ai un fichier 71.csv qui contient une liste d'adresse sur lesquelles j'ai 2 données à prendre : Une donnée et un lien.

    Fichier 71.csv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    http://www.bilansgratuits.fr/recherche/entreprise?rcs=48777248500024&rue=&depet=&siegeUniquement=False&chercher=
    http://www.bilansgratuits.fr/recherche/entreprise?rcs=31617316000011&rue=&depet=&siegeUniquement=False&chercher=
    http://www.bilansgratuits.fr/recherche/entreprise?rcs=50170887900025&rue=&depet=&siegeUniquement=False&chercher=
    http://www.bilansgratuits.fr/recherche/entreprise?rcs=42203923000020&rue=&depet=&siegeUniquement=False&chercher=
    http://www.bilansgratuits.fr/recherche/entreprise?rcs=52290266700016&rue=&depet=&siegeUniquement=False&chercher=
    http://www.bilansgratuits.fr/recherche/entreprise?rcs=39500162100022&rue=&depet=&siegeUniquement=False&chercher=
    http://www.bilansgratuits.fr/recherche/entreprise?rcs=78644750800098&rue=&depet=&siegeUniquement=False&chercher=
    http://www.bilansgratuits.fr/recherche/entreprise?rcs=50535276500026&rue=&depet=&siegeUniquement=False&chercher=
    http://www.bilansgratuits.fr/recherche/entreprise?rcs=44346802000021&rue=&depet=&siegeUniquement=False&chercher=
    http://www.bilansgratuits.fr/recherche/entreprise?rcs=51406683600016&rue=&depet=&siegeUniquement=False&chercher=
    Je code : (à l'aide d'un tuto http://francoisguillem.fr/2011/05/ex...s-structurees/)
    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
    18
    19
    20
    21
    22
    23
    library(XML)
     
    list71 = read.csv("71.csv")
     
    extracteur = function(url) {
    doc = htmlParse(url)
    D1 = xpathSApply(doc,"/html/body/div/div/div[2]/div/div[4]/div[3]/table/tbody/tr/td[6]",xmlValue)
    D2 = xpathSApply(doc,"/html/body/div/div/div[2]/div/div[4]/div[3]/table/tbody/tr/td[2]/a",xmlGetAttr,name = "href")
    return(data.frame(D1, D2))
    }
     
    data = NULL
    error = NULL
     
    for(i in 1:length(list71)) {
    tmp = NULL
    try(tmp = extracteur(list71[i]))
    if(is.null(tmp)) {
    error = c(error, i)
    } else {
    data = cbind(data, tmp)
    }
    }
    et j'ai le message d’erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur dans try(tmp = extracteur(list71[i])) : 
      argument inutilisé (tmp = extracteur(list71[i]))
    Je ne comprend pas ce que cela signifie.

    J'ai essayé la méthode d'un autre post du forum (http://www.developpez.net/forums/d13...on-xpathsapply) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i in 1:length(list71)) {
    D[i]<- xpathSApply(htmlParse(list71[i]),"/html/body/div/div/div[2]/div/div[4]/div[3]/table/tbody/tr/td[6]",xmlValue)
    E[i]<- xpathSApply(htmlParse(list71[i]),"/html/body/div/div/div[2]/div/div[4]/div[3]/table/tbody/tr/td[2]/a",xmlGetAttr,name = "href")
    }
    Mais cela ne fonctionne pas non plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur dans file.exists(file) : argument 'file' incorrect
    Je ne comprend pas, avec un lien précis, la première étape d'extraction fonctionne.

    Si quelqu’un peut m'aider, je l'en remercie d'avance.
    Je signe donc je suis

  2. #2
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2011
    Messages : 68
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    J'ai enfin réussi à passer cette étape (récupérer 1 lien et 1 donnée).
    Pour info, il fallait passer ma liste en vecteur...
    J'ai utiliser la méthode de Charlotte77 cité précédemment http://www.developpez.net/forums/d13...on-xpathsapply

    Ce qui m'amène à la seconde étape :
    Sur chaque liens obtenus, j'ai des données à récupérer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    http://www.bilansgratuits.fr/MOBIL-M--48777248500024.htm
    http://www.bilansgratuits.fr/AIA-ARCHITECTES--31617316000011.htm
    http://www.bilansgratuits.fr/VIGNAULT-X-FAURE--50170887900025.htm
    http://www.bilansgratuits.fr/QUADRA-ARCHITECTES--42203923000020.htm
    ... etc
    Le problème c'est que la fonction xpathSApply() ne fonctionne pas bien pour extraire les donnée contenu dans un "tableau" ou je ne sais quoi.
    Exemple dans ce lien : http://www.bilansgratuits.fr/MOBIL-M...7248500024.htm je cherche à extraire la donnée "Forme juridique", ex ici : SAS
    Je ne trouve pas correctement le chemin unique xpath ou même css.
    J'aimerai, pour la liste de lien ci dessus, récupérer la liste des "Forme juridique", j'utilise :
    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
    18
     
    ##Pour un lien précis :
    library(XML)
     
    X<-xpathSApply(htmlParse("http://www.bilansgratuits.fr/MOBIL-M--48777248500024.htm"), "/html/body/div/div/div[2]/div/div[4]/div[6]/div[4]/table/tbody/tr/td", xmlValue)
    ## --> Ca ne fonctionne pas, pourtant je pense que le chemin xpath est bon
     
    X<-xpathSApply(htmlParse("http://www.bilansgratuits.fr/MOBIL-M--48777248500024.htm"), "id('infogene-societe')//tr/td", xmlValue)
    ##-->Ca fonctionne plus ou moins, car ça me renvoi toute les données "td"
    ## J’arrive à isoler celle dont j'ai besoin avec :
    Y=X[1]
     
    ## Mais quand je boucle, la c'est la débandade, je ne comprend plus rien :D
    for(i in 1:length(list)) {
    try(X[i]<-xpathSApply(htmlParse(list[i]),"id('infogene-societe')//tr/td", xmlvalue)) }
     
    Error in xpathApply.XMLInternalDocument(doc, path, fun, ..., namespaces = namespaces,  : 
      objet 'xmlvalue' introuvable


    J'ai essayé avec la library(CSS) et la fonction cssApply() mais je me heurte aux mêmes problème.

    Es-ce que quelqu'un à une idée de la manière dont je doit procéder pour arriver à mes fins ?
    Je signe donc je suis

  3. #3
    Membre confirmé
    Homme Profil pro
    MCU
    Inscrit en
    Juillet 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : MCU
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 185
    Points : 486
    Points
    486
    Par défaut
    Bonjour,

    Le package XML contient une fonction pour extraire les tableaux d'une page HTML:

    HTH

    Vincent

  4. #4
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2011
    Messages : 68
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    Oui je connais cette fonction mais elle ne me permet pas de récupérer une seule valeur facilement.

    J'ai la solution. (merci à F. Guillem)
    On peut utiliser la fonction xpathSApply() avec le chemin Xpath.
    Dans mon exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X<-xpathSApply(htmlParse("http://www.bilansgratuits.fr/MOBIL-M--48777248500024.htm"), "/html/body/div/div/div[2]/div/div[4]/div[6]/div[4]/table/tbody/tr/td", xmlValue)
    Le chemin Xpath est "/html/body/div/div/div[2]/div/div[4]/div[6]/div[4]/table/tbody/tr/td"
    Le problème, c'est qu'il arrive que certain navigateurs rajoutent des éléments qui n'apparaissent pas dans le code source. Ici il s'agissait de l'élément "tbody".
    Du coup en l'enlevant ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X<-xpathSApply(htmlParse("http://www.bilansgratuits.fr/MOBIL-M--48777248500024.htm"), "/html/body/div/div/div[2]/div/div[4]/div[6]/div[4]/table/tr/td", xmlValue)
    Et là, ça renvoi donc la bonne valeur seule :
    [1] "SAS"

    Voila, j'espère avoir été clair.

    Mon problème est résolu, si vous avez des questions n'hésitez pas !

    Bye
    Je signe donc je suis

  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
    Bonjour,

    Je me retrouve face au même problème pour un autre site, je voudrais savoir comment avez vous fait pour savoir quel élément du chemin Xpath était en trop ? Car je n'arrive pas à extraire le contenu qui m'intéresse avec la même formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     j<-xpathSApply(htmlParse("http://donnons.org/annonce_804.php?idAnnonce=2155934"),
                      "/html/body/div[3]/div[4]/div[4]/div/table/tbody/tr[3]/td/table/tbody/tr/td/div/table/tbody/tr[2]/td", 
                      xmlValue)
    l'élément que je cherche ne ressort pas, je ne sais pas si c'est du à une erreur dans le chemin.. J'ai pourtant bien vérifié l'arborescence en détail et cela semble correspondre..

  6. #6
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Août 2011
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2011
    Messages : 68
    Points : 45
    Points
    45
    Par défaut
    Salut Charlotte

    C'est le même problème que moi. Le navigateur que tu utilise à rajouté des "tbody" dans le chemin xpath, mais dans le monde réel (code source de la page), ils n'existent pas... mystère !
    Donc si tu les enlèves tous de ton chemin, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    j<-xpathSApply(htmlParse("http://donnons.org/annonce_804.php?idAnnonce=2155934"),"/html/body/div[3]/div[4]/div[4]/div/table/tr[3]/td/table/tr/td/div/table/tr[2]/td",xmlValue)
    j
     
    ...
     
    [1] "Lot de billes, à venir chercher a domicile, je ne me déplace pas"
    [2] "à Taverny\n                      (Val-d'Oise-95, Ile-de-France)"
    Et la c'est good !
    Tchao bella..
    Je signe donc je suis

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/10/2013, 14h02
  2. [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
  3. Extraction données web fonction XpathSApply
    Par charlotte77 dans le forum R
    Réponses: 4
    Dernier message: 18/03/2013, 17h31
  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