tutorial selectorgadget scraping paquete page hacer espaƱol con como xml r web-scraping rcurl

xml - selectorgadget - Web scraping con R sobre anuncios inmobiliarios



selectorgadget firefox (2)

Como pasante en un equipo de investigación económica, me dieron la tarea de encontrar una forma de recopilar automáticamente datos específicos en un sitio web de anuncios inmobiliarios, utilizando R.

Supongo que los paquetes en cuestión son XML y RCurl , pero mi comprensión de su trabajo es muy limitada.

Aquí está la página principal del sitio web: http://www.leboncoin.fr/ventes_immobilieres/offres/nord_pas_de_calais/?f=a&th=1&zz=59000 Idealmente, me gustaría construir mi base de datos para que cada fila corresponda a una anuncio.

Aquí está el detalle de un anuncio: http://www.leboncoin.fr/ventes_immobilieres/197284216.htm?ca=17_s Mis variables son: el precio ("Prix"), la ciudad ("Ville"), la superficie ( "superficie"), el "GES, el" Classe énergie "y el número de habitaciones (" Pièces "), así como el número de imágenes que se muestran en el anuncio. También me gustaría exportar el texto en un vector de caracteres sobre que luego realizaría un análisis de minería de textos.

Estoy buscando ayuda, enlace a un tutorial o How-to que me daría una pista sobre el camino a seguir.


Puede usar el paquete XML en R para raspar esta información. Aquí hay una pieza de código que debería ayudar.

# 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) }

Aquí se explica cómo usaría estas funciones para extraer información en un marco de datos.

# 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'')

Esto devuelve la siguiente salida

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)

Puede usar fácilmente la familia de funciones apply para recorrer varias páginas para obtener detalles de todos los anuncios. Dos cosas para tener en cuenta. Una es la legalidad de raspado del sitio web. Dos es usar Sys.sleep en su función de bucle para que los servidores no sean bombardeados con solicitudes.

Déjame saber cómo funciona esto


Esa es una gran pregunta, por lo que debes dividirla en otras más pequeñas y ver en qué partes te quedas atascado.

¿El problema es recuperar una página web? (Tenga cuidado con los problemas del servidor proxy.) ¿O es el poco difícil acceder a los bits de datos útiles de la misma? (Probablemente necesites usar xPath para esto).

Eche un vistazo al ejemplo de raspado web en el código Rosetta y explore estas preguntas SO para obtener más información.