You need to enable JavaScript to run this app. Rvest爬取网页表格仅返回首行其余内容全为NA该如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Rvest爬取网页表格仅返回首行其余内容全为NA该如何解决?

问题原因

目标页面的表格数据为前端动态渲染生成,rvest仅能读取首次请求返回的静态HTML源码,该源码中对应表格仅包含空的结构框架,所有持仓数据是页面加载完成后通过JavaScript异步请求后台接口后才填充到页面中的,因此直接用html_table解析只能拿到空值与大量NA。

解决方案

有两种常用的解决路径,可根据需求选择:

  • 方案1:使用支持动态渲染的爬虫工具模拟浏览器加载页面,等待数据填充完成后再提取表格,这里以chromote包为例,代码示例如下:
# 先安装依赖包
# install.packages(c("chromote", "rvest", "dplyr"))
library(chromote)
library(rvest)
library(dplyr)

# 启动浏览器实例,加载目标页面
b <- ChromoteSession$new()
b$Page$navigate("https://www.viewbase.com/bitfinex_long_short_position")
# 等待2秒让页面完成数据加载,可根据网络情况调整时长
Sys.sleep(2)

# 获取渲染完成后的页面源码
html <- b$Runtime$evaluate('document.documentElement.outerHTML')$result$value
# 关闭浏览器实例
b$close()

# 用rvest正常解析表格
Longs <- read_html(html) %>%
  html_node(xpath='/html/body/div[1]/div[3]/div[2]/div[2]/div[2]/div/div[2]/div/div[2]/table') %>%
  html_table(fill=TRUE) %>%
  as.data.frame()

# 输出结果验证
head(Longs)

注:使用chromote需要本地已安装Chrome、Edge等Chromium内核浏览器,运行时会自动调用。

  • 方案2:直接抓取页面异步请求的数据接口,跳过页面渲染步骤直接拿到结构化数据。你可以通过浏览器开发者工具的「网络」面板,筛选Fetch/XHR类型的请求,找到返回持仓数据的接口,用httr包直接发起请求解析返回的JSON数据即可,这种方法性能更高、速度更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 07:15:04