【问题标题】:html_nodes giving {xml_nodeset (0)}html_nodes 给 {xml_nodeset (0)}
【发布时间】:2016-06-23 18:23:57
【问题描述】:

我正在尝试从 www.speedtest.net/awards/ca/ontario 抓取数据,当我沿着某些路径前进时,标准功能似乎可以工作,但其他路径却没有。我不知道为什么。

例如,如果我进入标题并查找脚本它可以工作

library(rvest)
URL<-read_html("http://www.speedtest.net/awards/ca/ontario")
test1<-html_nodes(URL,xpath='/html/head/script[1]')
test1

这将按预期返回 {xml_nodeset (1)}。

但是如果我进入身体并尝试类似的东西

test2<-html_nodes(URL,xpath='/html/body/script[1]')
test2

我得到 {xml_nodeset (0)}。

为什么我无法访问 body 下的节点?

我正在尝试使用下面的代码,但我已将问题追溯到上述问题。

real<-html_nodes(URL,xpath='/html/body/div[1]/div[3]/div/div[2]/div/div[3]/div[2]/table')
real

有什么想法吗?

【问题讨论】:

  • 您希望在body 下找到script 标签吗?
  • 是的。我还尝试找到也应该存在的 div 标签并返回相同的 {xml_nodeset (0)}。

标签: r xpath web-scraping rvest


【解决方案1】:

谢谢。使用 css 标记搜索,我能够想出这个方法,它可以很好地获得我想要的表格(右下角的那个)。

library(rvest)
URL<-read_html("http://www.speedtest.net/awards/ca/ontario")
table<-html_nodes(URL, "table")
table<-html_table(table)[[2]]

【讨论】:

    【解决方案2】:

    试试这个,可能不完整,但它应该为回答您的问题提供一个良好的开端:

    library(rvest)
    URL<-read_html("http://www.speedtest.net/awards/ca/ontario")
    #find the table rows in the page
    table<-html_nodes(URL, "tbody tr")
    
    #pull info from the table rows
    num<-html_text(html_nodes(table, "td.u-align-right"))
    provider<-html_text(html_nodes(table, "td.cell-provider-name"))
    
    #final data.frame with a table of the results
    df<-data.frame(provider, matrix(num, ncol=3, byrow=TRUE))
    

    使用 rvest,我发现搜索 css 标签比搜索 xpath 更容易。

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多