2015-04-25 13 views
18

Tôi đang sử dụng rvest trong R để thực hiện một số thao tác cạo. Tôi biết một số HTML và CSS.R: rvest: cạo một trang thương mại điện tử động

Tôi muốn để có được giá cả của tất cả các sản phẩm của một URI:

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

Các mặt hàng mới nạp khi bạn đi xuống trên trang (như bạn làm một số di chuyển).

Những gì tôi đã làm như vậy cho đến nay:

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

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

Và tôi nhận được những gì tôi cần, nhưng chỉ dành cho 25 yếu tố đầu tiên (những tải cho mặc định).

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

Câu hỏi: Cách nhận tất cả các yếu tố của phần động này?

Tôi đoán, tôi có thể cuộn trang cho đến khi tất cả các phần tử được tải và sau đó sử dụng html (URL). Nhưng điều này có vẻ như rất nhiều công việc (tôi đang lập kế hoạch làm điều này trên các phần khác nhau). Nên có một công việc có lập trình xung quanh.

Bất kỳ gợi ý nào đều được hoan nghênh!

+0

Bạn sẽ cần phải sử dụng XPath (trong R hoặc bên ngoài của R) - có một cái nhìn tại 'gói XML'. –

+0

Nó không thể được thực hiện với Rvest? Tôi đã thấy Rvest nhập XML. Tôi đã đọc somestuff về XML. Nhưng tôi là URL trong ví dụ của tôi, tôi không thấy thẻ meta này từ XML. Bạn có thể giúp tôi không –

+0

Ở đây, tôi nghĩ rằng có lẽ điều này sẽ giúp bạn làm điều đó trong 'rvest': http://stackoverflow.com/questions/27812259/following-next-link-with-relative-paths-using-rvest –

Trả lời

19

Như @nrussell đề xuất, bạn có thể sử dụng RSelenium để cuộn xuống một cách có lập trình trang trước khi nhận mã nguồn.

Bạn có thể ví dụ làm:

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() 
+0

Tuyệt vời. Nó làm việc như một say mê. Cảm ơn! –

+0

Tôi đã học một số Javascript, nhưng tôi không nhận được vòng lặp cho bạn đã sử dụng. Bạn có thể chỉ cho tôi một tài liệu về điều này không? –

+0

đây là vòng lặp R 'for' chứ không phải là javascript, một số thông tin [ở đây] (http://paleocave.sciencesortof.com/2013/03/writing-a-for-loop-in-r/) – NicE

Các vấn đề liên quan