html - 如何使用带有 R (rvest) 的 selectorgadget webscrape .dpbox 表?

标签 html css r web-scraping rvest

我一直在尝试使用 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/

相关文章:

html - 裁剪 <image> 高度并添加垂直边距

javascript - Vue.js:使用 JS 虚拟键盘时,V 模型输入未更新

jquery - 使用 jQuery 根据 div 中的内容调整最小高度

r - 在 mutate_at() 中访问列名

html - 在 URL 中强制换行

javascript - Div 和 ul 并排列出

html - 在 IE9/10 中将表格单元格内部 div 的高度设置为表格单元格高度的 100%

javascript - 在 css/js 中隐藏或显示复选框中的内容

光栅和 ggplot map 在 R 中没有完全对齐

r - 将数字列表转换为字符时,如何控制数字的格式?