Вы можете использовать пакет XML
в R для очистки этих данных.Вот фрагмент кода, который должен помочь.
# DEFINE UTILITY FUNCTIONS
# Function to Get Links to Ads by Page
get_ad_links = function(page){
require(XML)
# construct url to page
url_base = "http://www.leboncoin.fr/ventes_immobilieres/offres/nord_pas_de_calais/"
url = paste(url_base, "?o=", page, "&zz=", 59000, sep = "")
page = htmlTreeParse(url, useInternalNodes = T)
# extract links to ads on page
xp_exp = "//td/a[contains(@href, 'ventes_immobilieres')]"
ad_links = xpathSApply(page, xp_exp, xmlGetAttr, "href")
return(ad_links)
}
# Function to Get Ad Details by Ad URL
get_ad_details = function(ad_url){
require(XML)
# parse ad url to html tree
doc = htmlTreeParse(ad_url, useInternalNodes = T)
# extract labels and values using xpath expression
labels = xpathSApply(doc, "//span[contains(@class, 'ad')]/label", xmlValue)
values1 = xpathSApply(doc, "//span[contains(@class, 'ad')]/strong", xmlValue)
values2 = xpathSApply(doc, "//span[contains(@class, 'ad')]//a", xmlValue)
values = c(values1, values2)
# convert to data frame and add labels
mydf = as.data.frame(t(values))
names(mydf) = labels
return(mydf)
}
Вот как вы могли бы использовать эти функции для извлечения информации во фрейм данных.
# grab ad links from page 1
ad_links = get_ad_links(page = 1)
# grab ad details for first 5 links from page 1
require(plyr)
ad_details = ldply(ad_links[1:5], get_ad_details, .progress = 'text')
Это возвращает следующий вывод
Prix : Ville : Frais d'agence inclus : Type de bien : Pièces : Surface : Classe énergie : GES :
469 000 € 59000 Lille Oui Maison 8 250 m2 F (de 331 à 450) <NA>
469 000 € 59000 Lille Oui Maison 8 250 m2 F (de 331 à 450) <NA>
140 000 € 59000 Lille <NA> Appartement 2 50 m2 D (de 151 à 230) E (de 36 à 55)
140 000 € 59000 Lille <NA> Appartement 2 50 m2 D (de 151 à 230) E (de 36 à 55)
170 000 € 59000 Lille <NA> Appartement <NA> 50 m2 D (de 151 à 230) D (de 21 à 35)
Вы можете легко использовать семейство функций apply
для циклического перебора нескольких страниц, чтобы получить подробную информацию обо всех объявлениях.Две вещи, о которых нужно помнить.Одним из них является законность соскоб с сайта.Второе - использовать Sys.sleep
в функции зацикливания, чтобы серверы не подвергались бомбардировке запросов.
Дайте мне знать, как это работает