r - R web 抓取包无法读取所有 url 表
问题描述
我正在尝试从以下链接中抓取一些表格:' https://www.pro-football-reference.com/boxscores/201209050nyg.htm '从我尝试多种方法/包中可以看出认为 R 无法读取整个 url。这是我所做的一些尝试:
a <- getURL(url)
tabs <- readHTMLTable(a, stringsAsFactors = T)
和
x <- read_html(url)
y <- html_nodes(x,xpath= '//*[@id="div_home_snap_counts"]')
我已经用这两种方法成功地阅读了前两个表,但在那之后,无论我使用 xpath 还是 css,我都无法阅读任何其他表。有谁知道为什么我没有阅读这些后来的表格?
解决方案
如果您使用 Chrome 之类的浏览器,您可以进入设置并禁用 javascript。然后您会看到只有几张桌子。其余的需要运行 javascript 才能加载。当您使用当前方法时,这些不会被加载,如浏览器中显示的那样。可能的解决方案是:
- 使用 RSelenium 之类的方法,这将允许 javascript 运行
- 检查页面的 HTML 以查看信息是否存储在其他地方并且可以从那里获取。有时信息是从
script
标签中检索的,例如,它作为 json/javascript 对象存储在哪里 - 刷新页面时监控网络流量(F12 打开开发工具,然后打开网络选项卡),看看您是否可以找到加载附加内容的来源。您可能会找到可以使用的其他端点)。
查看页面,似乎至少有两个丢失的表(可能全部)实际上存储在返回的 html 中的注释中,与具有 class 的 div 相关联placeholder
;并且您需要删除评论标记,或使用允许解析评论的方法。据推测,当 javascript 运行时,这些注释将转换为显示的内容。
以下是来自 html 的示例:
查看@alistaire的这个答案,一种方法如下(如上图所示为单个示例表)
library(rvest)
h <- read_html('https://www.pro-football-reference.com/boxscores/201209050nyg.htm')
df <- h %>% html_nodes(xpath = '//comment()') %>%
html_text() %>%
paste(collapse = '') %>%
read_html() %>%
html_node('#game_info') %>%
html_table()
推荐阅读
- networking - 在 Kerio Control 中添加接口
- reactjs - MouseEvent 打字稿反应
- shopify - 如何在 templates/customers/order.liquid 模板上打印信用卡的最后 4 个数字?
- javascript - 如何解码 JavaScript 文件 chunk.js?
- android - 为 android WebView 使用硬件层会消耗太多电池吗?
- react-native - 搜索 react-native 项目的过滤器存储库
- kubernetes - 由于活性探测失败,Argo 工作流卡在挂起?
- c# - 从 Xml 中删除元素会在重新加载时破坏格式
- javascript - 返回一个常规数组而不是 Observable
在 RxJS 中 - c++ - 当我使用 size(vec) 而不是 vec.size() 来查找向量的大小时出现错误。如何解决这个问题?