RVEST的CSS Selector问题

时间:2017-02-12 21:03:02

标签: r rvest

我正在尝试使用Rvest从Wine.com中选择产品

library(rvest)
wine <- read_html("http://www.wine.com/v6/90-Rated-Under-20/wine/list.aspx?N=7155+2407")

p <-wine %>%
  html_nodes(".listProductName") %>%
  html_text()

我使用CSS Selector来查看.listProductName选择产品节点。当我运行此代码时,不会返回任何内容。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我怀疑问题在于您搜索的节点位于aspx form内,因此它们仅针对浏览器生成,而不是针对卷曲请求生成。
我看到两个解决方案:

使用rvest

如果您只对产品名称感兴趣或可以使用简单的东西:

p <-wine %>%
  html_nodes('.prodItemInfo_link') %>%
  html_text()

我得到了那个选择器,分析了wine %>% html_nodes('a')查找葡萄酒名称的结果,发现该类中的产品。

使用RSelenium

如果您安装并运行了Selenium,我们可以模拟正常的浏览器请求:

remDr <- remoteDriver(remoteServerAddr = "localhost" 
                      , port = 4444L
                      , browserName = "htmlunit"
)
remDr$open()
url <- "http://www.wine.com/v6/90-Rated-Under-20/wine/list.aspx?N=7155+2407"
remDr$navigate(url)

此页面应与我们使用普通浏览器看到的页面相同,因此我们可以选择具有其类别的节点:

webElems <- remDr$findElements(using = 'class', 'listProductName')

然后提取每个节点的文本内容:

wines <- sapply(webElems, function(x) x$getElementText())

希望这有帮助