Bonjour,
Je vous contacte car je rencontre à nouveau un problème pour un travail d'extraction de petites annonces sur un site internet. Je cherche à extraire les données des petites annonces dont une partie se présente sous forme de table, le problème est que certaines table ont des informations différentes et mon programme ne fonctionne pas.
Voila le script pour obtenir mes données :
Voila mon code pour extraire mes tables qui va me poser problème par la suite , car j'ai du suite à vos conseil utiliser la fonction grep pour filtrer les valeurs manquante lorsque certaines informations n'étaient pas renseignées:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 docu<-sprintf("http://www.leboncoin.fr/_maison_/offres/ile_de_france/?o=%s",1:8) links <- sapply(docu, function(x) { xpathSApply (htmlParse(x), "//div[contains(@class,'list-lbc')]/a", xmlGetAttr,name = "href") }) listli<-as.vector(links) length(listli)
Mon problème vient du fait que certaines annonces son sous la forme :
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 v<-NA MyTable <- data.frame() for (i in 1:length(listli)) { v[i] <- readHTMLTable(listli[i], head=2) val <- as.character(v[[i]]$V2) # Transformation du prix commençant par un chiffre et se terminant par prix <- grep('^[0-9].*[^a-zA-Z0-9]$', val, perl=T) if (length(prix)!=0) { MyTable[i,1] <- val[prix] } else {MyTable[i,1] <- NA } # Transformation d'une ville, c'est tout ce qui commence par des lettres et ne contenant pas de chiffres # on suppose que les noms des villes depassent au moins 4 carateres vil <- grep('^[a-zA-Z].{4,1000}$', val, perl=T) if (length(vil)!=0) { MyTable[i,2] <- val[vil] } else {MyTable[i,2] <- NA } # Transformation du code postal: c'est exactement 5 chiffre, sans le signe et sans lettre alphabetiques cp <- grep('^[0-9]{5}$', val, perl=T) if (length(cp)!=0) { MyTable[i,4] <- val[cp] } else {MyTable[i,4] <- NA } } names(MyTable) <- c("prix", "ville","Code Postal")
Et d'autres notamment les vêtements ajoutent des informations notamment le type et la taille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Prix : 10 Ville : Melun Code Postal : 77170
En fait je souhaiterais ne récupérer que les 3 1ères lignes de ces différents tableaux avec seulement le prix la ville et le code postal..Sachant que parfois, le prix ou le code postal ou la ville ne sont pas non plus renseigné..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Prix : 10 Ville : Melun Code Postal : 77170 Type : Femme Taille : 38
Quelqu'un aurait une idée de comment filtrer ces données ? Est ce que selon vous je suis obligée de récuperer quand même ces données en rajoutant des variables ? Mais je ne saurais pas comment différencier par exemple le type ( homme femme enfant ) de la ville, avec la fonction Grep..
Je vous remercie par avance
Partager