selectorgadget - Raspado de una página de comercio electrónico dinámico con desplazamiento infinito
scraping a web page using r (2)
Como sugirió @nrussell, puede usar
RSelenium
para desplazarse programáticamente por la página antes de obtener el código fuente.
Podría, por ejemplo, hacer:
library(RSelenium)
library(rvest)
#start RSelenium
checkForServer()
startServer()
remDr <- remoteDriver()
remDr$open()
#navigate to your page
remDr$navigate("http://www.linio.com.co/tecnologia/celulares-telefonia-gps/")
#scroll down 5 times, waiting for the page to load at each time
for(i in 1:5){
remDr$executeScript(paste("scroll(0,",i*10000,");"))
Sys.sleep(3)
}
#get the page html
page_source<-remDr$getPageSource()
#parse it
html(page_source[[1]]) %>% html_nodes(".product-itm-price-new") %>%
html_text()
Estoy usando
rvest
en R para raspar.
Sé algo de HTML y CSS.
Quiero obtener los precios de cada producto de un URI:
http://www.linio.com.co/tecnologia/celulares-telefonia-gps/
Los nuevos elementos se cargan a medida que avanza en la página (a medida que se desplaza).
Lo que he hecho hasta ahora:
Linio_Celulares <- html("http://www.linio.com.co/celulares-telefonia-gps/")
Linio_Celulares %>%
html_nodes(".product-itm-price-new") %>%
html_text()
Y obtengo lo que necesito, pero solo para los 25 primeros elementos (esos se cargan por defecto).
[1] "$ 1.999.900" "$ 1.999.900" "$ 1.999.900" "$ 2.299.900" "$ 2.279.900"
[6] "$ 2.279.900" "$ 1.159.900" "$ 1.749.900" "$ 1.879.900" "$ 189.900"
[11] "$ 2.299.900" "$ 2.499.900" "$ 2.499.900" "$ 2.799.000" "$ 529.900"
[16] "$ 2.699.900" "$ 2.149.900" "$ 189.900" "$ 2.549.900" "$ 1.395.900"
[21] "$ 249.900" "$ 41.900" "$ 319.900" "$ 149.900"
Pregunta: ¿Cómo obtener todos los elementos de esta sección dinámica?
Supongo que podría desplazar la página hasta que se carguen todos los elementos y luego usar html (URL). Pero esto parece mucho trabajo (estoy planeando hacer esto en diferentes secciones). Debería haber una solución programática.
library(rvest)
url<-"https://www.linio.com.co/c/celulares-y-tablets?page=1"
page<-html_session(url)
html_nodes(page,css=".price-secondary") %>% html_text()
Recorra el sitio web
https://www.linio.com.co/c/celulares-y-tablets?page=2
y 3 y así sucesivamente, y le será fácil raspar los datos
EDITADO con fecha 07/05/2019
Los elementos del sitio web han cambiado. De ahí nuevo código
library(rvest)
url<-"https://www.linio.com.co/c/celulares-y-tablets?page=1"
page<-html_session(url)
html_nodes(page,css=".price-main") %>% html_text()