我一直在尝试使用 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)}
但是,当我尝试网络抓取 http://www.dotapicker.com/heroes/Abaddon 时使用selectorgadget,原来是这段代码:
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)}
我觉得这与表格在下拉框中的嵌套有关(与以前相比,表格就在网页本身上)但我不确定如何解决它。
谢谢您,感谢您的帮助!
最佳答案
这个页面似乎使用 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.
关于html - 如何使用带有 R (rvest) 的 selectorgadget webscrape .dpbox 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46015517/