无法用R抓取CME Group网站表格,求转为DataFrame的解决方案
解决CME Term SOFR表格抓取问题
原因分析
该页面的表格是通过JavaScript动态渲染生成的,静态HTML抓取工具(如xml2::read_html或rvest::html_nodes)只能获取页面初始加载的静态代码,无法捕获JS加载后的表格内容。
方法1:用RSelenium模拟浏览器渲染
RSelenium可模拟真实浏览器加载页面,获取动态渲染后的完整内容:
- 安装并加载依赖包:
install.packages(c("RSelenium", "rvest", "dplyr")) library(RSelenium) library(rvest) library(dplyr)
- 启动Chrome浏览器驱动(需确保ChromeDriver版本与本地Chrome匹配):
driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]]
- 访问目标页面并等待表格加载:
remDr$navigate("https://www.cmegroup.com/market-data/cme-group-benchmark-administration/term-sofr.html") Sys.sleep(5) # 可根据网络情况调整等待时长
- 解析页面源码提取表格:
page_source <- remDr$getPageSource()[[1]] page_html <- read_html(page_source) table_node <- html_node(page_html, "table") term_sofr_df <- html_table(table_node, fill = TRUE)
- 关闭浏览器驱动:
remDr$close() driver$server$stop()
方法2:直接调用API接口(更高效)
通过浏览器开发者工具抓包,可找到表格数据的API接口,直接请求获取数据:
- 安装并加载
jsonlite包:
install.packages("jsonlite") library(jsonlite)
- 请求API并解析为DataFrame:
api_url <- "https://www.cmegroup.com/CmeWS/mvc/TermSOFR/V1/settle" response <- fromJSON(api_url) term_sofr_df <- as.data.frame(response$settlements)
注:API接口可能随网站更新变化,若失效可通过浏览器F12「网络」面板重新查找数据请求。
注意事项
- 使用RSelenium时,需保证浏览器驱动版本与本地浏览器版本一致,否则会出现启动失败问题。
- API请求若出现访问限制,可添加请求头模拟浏览器访问。
内容的提问来源于stack exchange,提问作者LBZR
相关产品推荐
相关产品推荐

