web-dev-qa-db-fra.com

R: rvest: gratter une page de commerce électronique dynamique

J'utilise rvest dans R pour gratter. Je connais un peu HTML et CSS.

Je veux obtenir les prix de chaque produit d'un URI:

http://www.linio.com.co/tecnologia/celulares-telefonia-gps/

Les nouveaux éléments se chargent au fur et à mesure que vous faites défiler la page.

Ce que j'ai fait jusqu'à présent:

Linio_Celulares <- html("http://www.linio.com.co/celulares-telefonia-gps/")

Linio_Celulares %>%
  html_nodes(".product-itm-price-new") %>%
  html_text()

Et j'obtiens ce dont j'ai besoin, mais seulement pour les 25 premiers éléments (ceux qui sont chargés par défaut). 

 [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" 

Question: Comment obtenir tous les éléments de cette section dynamique?  

Je suppose que je pourrais faire défiler la page jusqu'à ce que tous les éléments soient chargés, puis utiliser HTML (URL). Mais cela semble être beaucoup de travail (je prévois de le faire sur différentes sections). Il devrait y avoir un travail programmatique autour.

Tout indice est le bienvenu!

19
Omar Gonzales

Comme @nrussell l'a suggéré, vous pouvez utiliser RSelenium pour faire défiler la page par programmation avant d'obtenir le code source.

Vous pouvez par exemple faire:

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()
22
NicE
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()

Parcourez les sites Web https://www.linio.com.co/c/celulares-y-tablets?page=2 et 3, etc., et il vous sera facile de récupérer les données.

0
Bharath