【问题标题】:CSS Selector issue with RVESTRVEST 的 CSS 选择器问题
【发布时间】:2017-02-13 07:24:39
【问题描述】:

我正在尝试使用 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 选择器查看 .listProductName 选择了产品节点。当我运行此代码时,没有返回任何内容。有什么想法吗?

【问题讨论】:

    标签: r rvest


    【解决方案1】:

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


    使用 rvest

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

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

    我得到那个选择器来分析 wine %&gt;% 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())
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2018-10-16
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多