You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R语言rvest包抓取网页表格?多次尝试失败求助

解决JS动态页面的表格抓取问题

你的问题出在目标页面的表格是JavaScript动态渲染的,rvest::read_html()只能抓取页面初始的静态HTML,根本看不到JS加载后的表格节点,所以所有定位都会返回NA。

下面给两种实用的解决方法:

方法1:用无头浏览器渲染页面后抓取

推荐用轻量的chromote包(依赖Chrome/Edge浏览器),能模拟浏览器加载JS并获取完整渲染后的页面:

# 先安装依赖
install.packages(c("chromote", "rvest"))

library(chromote)
library(rvest)

# 启动无头会话
session <- ChromoteSession$new()
# 导航到目标页面
session$Page$navigate("https://data.cms.gov/provider-characteristics/medicare-provider-supplier-enrollment/medicare-fee-for-service-public-provider-enrollment/api-docs")
# 等待页面加载完成(超时10秒,可按需调整)
session$Page$waitFor(timeout = 10000)

# 获取渲染后的完整HTML
rendered_html <- session$Page$getFrameTree()$frame$content
parsed_html <- read_html(rendered_html)

# 定位表格(可根据页面实际结构调整选择器,比如".table"或直接"table")
target_table <- parsed_html %>% html_node("table") %>% html_table()

# 关闭会话
session$close()

# 查看结果
print(target_table)

方法2:直接调用API接口(更高效)

既然目标页是API文档,大概率有直接返回数据的接口。打开浏览器开发者工具(F12)→ 网络面板 → 筛选XHR/Fetch请求,找到返回表格数据的API地址,直接用jsonlite请求:

library(jsonlite)
# 替换成你找到的API端点
api_endpoint <- "实际找到的API地址"
raw_data <- fromJSON(api_endpoint)
# 转换成表格格式
table_data <- as.data.frame(raw_data)

这种方式比渲染页面快得多,是优先选择的方案。


内容的提问来源于stack exchange,提问作者MCP_infiltrator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 15:45:11