【问题标题】:Scrape Products Information from a Ecommerce Page从电子商务页面抓取产品信息
【发布时间】:2016-04-21 13:39:32
【问题描述】:

需要从电子商务页面中抓取产品信息。但是页面有无限滚动。目前,我能够只抓取显示的产品而无需向下滚动。下面是它的代码。

require(RCurl)
require(XML)
require(dplyr)
require(stringr)

webpage <- getURL("http://www.jabong.com/kids/clothing/girls-clothing/kids-tops-t-shirts/?source=topnav_kids")

linklist <- str_extract_all(webpage, '(?<=href=")[^"]+')[[1]]
linklist <- as.data.frame(linklist)
linklist <- filter(linklist, grepl("\\?pos=", linklist))
linklist <- unique(linklist)

a <- as.data.frame(linklist)
a[2] <- "Jabong.com"
a <- add_rownames(a, "ID")
a$V3 <- gsub(" ", "", paste(a$V2, a$linklist))
a <- a[, -(1:3)]
colnames(a) <- "Links"

【问题讨论】:

  • 需要页面上可用的每个产品的链接..上面的脚本提供了前 52 个产品链接..但我需要所有可用的链接..因为 jabong 具有无限滚动..也许 rselenium 可以提供帮助..但无法使用它

标签: r rvest rselenium


【解决方案1】:

好吧,如果滚动真的是无限的,那么就不可能得到所有的链接......如果你想满足于一个有限的数字,你确实可以在这里使用RSelenium

library(RSelenium)

#start RSelenium
checkForServer()
startServer()
remDr <- remoteDriver()
remDr$open()

# load your page
remDr$navigate("http://www.jabong.com/kids/clothing/girls-clothing/kids-tops-t-shirts/?source=topnav_kids")

# scroll down 5 times, allowing 3 second for the page to load everytime
for(i in 1:5){      
  remDr$executeScript(paste("scroll(0,",i*10000,");"))
  Sys.sleep(3)    
}

# get the page html
page_source<-remDr$getPageSource()

# get the URL's that you are looking for
pp <- xml2::read_html(page_source[[1]]) %>% 
  rvest::html_nodes("a") %>% 
  rvest::html_attr("data-original-href") %>% 
  {.[!is.na(.)]}

结果是 312 个链接(在我的浏览器中)。 RSelenium 向下滚动的次数越多,获得的链接就越多。

【讨论】:

  • 代码对我不起作用..remDr$open()...给出错误...queryRD(paste0(serverURL, "/session"), "POST", qdata 中的错误= toJSON(serverOpts))...
  • 您是否有RSelenium 必需品,即1) selenium jarfile 2) chromedriver.exe / firefox 驱动程序,确保您可以在尝试发布的解决方案link1 和@987654322 之前先运行此链接上的代码@
  • @Peter :上面的脚本只适用于 11 次滚动。之后,需要单击“显示更多产品”按钮才能向下滚动。我们应该添加什么到呈现脚本以便进一步滚动?