我一直在尝试使用R中的selectorgadget从特定网站上抓取数据。例如,我之前成功地从http://www.dotabuff.com/heroes/abaddon/matchups进行了网页编辑。通常,我只需使用selectorgadget Chrome扩展程序点击我想要的表格,然后将CSS选择结果放入代码中,如下所示。
urlx <- "http://www.dotabuff.com/heroes/abaddon/matchups"
rawData <- html_text(html_nodes(read_html(urlx),"td:nth-child(4) , td:nth-child(3), .cell-xlarge"))
在这种情况下,html_nodes函数确实返回了一大堆节点(340)
{xml_nodeset (340)}
然而,当我尝试使用selectorgadget关闭http://www.dotapicker.com/heroes/Abaddon时,结果是这段代码:
urlx <- "http://www.dotapicker.com/heroes/abaddon"
rawData <- html_text(html_nodes(read_html(urlx),".ng-scope:nth-child(1) .ng-scope .ng-binding"))
不幸的是,在调用html_nodes函数后实际上没有节点出现,我得到了结果
{xml_nodeset (0)}
我觉得这与桌子在下拉框中的嵌套有关(与以前相比,桌子本身就在网页上),但我不知道如何绕过它。
谢谢你,我感谢任何帮助!
答案 0 :(得分:0)
似乎这个页面使用XHR动态加载一些数据。在Chrome中,您可以通过检查然后选择网络标签来检查。如果这样做,您将看到有许多json文件正在加载。您可以直接刮取这些json文件,然后解析它们以提取所需的信息。这是一个简单的例子:
library(httr)
library(jsonlite)
heroinfo_json <- GET("http://www.dotapicker.com/assets/json/data/heroinfo.json")
heroinfo_flat <- fromJSON(content(heroinfo_json, type = "text"))
#> No encoding supplied: defaulting to UTF-8.
winrates_json <- GET("http://www.dotapicker.com/assets/dynamic/winrates10d.json")
winrates_flat <- fromJSON(content(winrates_json, type = "text"))
#> No encoding supplied: defaulting to UTF-8.