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

在R中用rvest爬取网页多表格仅获首表数据,如何获取全部?

解决R语言rvest爬取动态表格为空的问题

问题原因

目标页面的第2至第5个表格是JavaScript动态渲染的,read_html()只能抓取页面首次加载的静态HTML代码,此时这些表格的内容还未被JS填充,所以html_table()提取到的是空的tibble。

解决方案1:使用RSelenium模拟浏览器渲染

RSelenium可以模拟真实浏览器执行JavaScript,获取完整渲染后的页面内容,从而提取到所有表格数据。

步骤1:安装并加载依赖包

# 首次运行需安装包
install.packages(c("RSelenium", "rvest"))

# 加载包
library(RSelenium)
library(rvest)

步骤2:启动浏览器并访问目标页面

# 启动Chrome驱动(需确保本地已安装Chrome及对应版本的chromedriver)
driver <- rsDriver(browser = "chrome", port = 4567L)
remote_driver <- driver[["client"]]

# 跳转至目标页面
remote_driver$navigate("https://report-nle.dephub.go.id/dashboard/detail/27019186")

# 等待页面完全加载(可根据网络情况调整等待时长)
Sys.sleep(5)

步骤3:提取完整页面的表格数据

# 获取渲染后的页面源码
page_html <- remote_driver$getPageSource()[[1]] %>% read_html()

# 提取所有表格
tables <- page_html %>% html_nodes("table") %>% html_table()

# 验证结果
lapply(tables, head)

步骤4:关闭浏览器驱动

remote_driver$close()
driver[["server"]]$stop()

解决方案2:直接解析页面内嵌的动态数据

如果不想依赖浏览器模拟,可通过开发者工具定位表格数据的来源:

  1. 打开页面开发者工具(F12),切换到Sources标签,查找页面内嵌的JSON格式数据;
  2. 用V8引擎解析这些数据,直接转换为数据框:
install.packages("V8")
library(V8)

# 获取静态页面源码,提取内嵌的JS数据
static_html <- read_html("https://report-nle.dephub.go.id/dashboard/detail/27019186")
js_script <- static_html %>% html_nodes("script[type='text/javascript']") %>% html_text()

# 筛选包含表格数据的脚本片段,用V8解析
ctx <- v8()
ctx$eval(js_script)
# 根据实际数据结构提取表格内容,示例需根据页面实际JS调整
table_data <- ctx$get("window.tableDataVariable")

内容的提问来源于stack exchange,提问作者Funkeh-Monkeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:52:38