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

R语言rvest爬取比特币BitVol指数HTML表格返回空列表问题求助

问题根因

rvest仅支持抓取页面初始加载时就存在的静态HTML内容。目标站点的BitVol数据由JavaScript动态渲染生成,你要找的highcharts-data-table-1表格,只有手动点击「View data table」按钮后才会被插入到页面DOM结构中,初始请求返回的HTML源码里不存在该元素,因此xpath匹配不到内容,最终返回空列表。

可行解决方案

方案1:通过RSelenium模拟浏览器操作(推荐,适配性高)

该方案模拟真实浏览器行为,触发按钮点击后等待动态内容渲染完成再抓取,代码示例如下:

  1. 先安装依赖包:
install.packages(c("RSelenium", "wdman"))
  1. 爬取代码:
library(RSelenium)
library(rvest)
library(tidyverse)

# 启动Chrome驱动
driver <- rsDriver(browser = "chrome", chromever = "latest", port = free_port())
remDr <- driver$client
remDr$open()

# 访问目标页面
remDr$navigate("https://t3index.com/indices/bit-vol/")
Sys.sleep(3) # 等待页面基础资源加载完成

# 定位并点击「View data table」按钮
view_table_btn <- remDr$findElement(using = "xpath", '//*[text()="View data table"]')
view_table_btn$clickElement()
Sys.sleep(2) # 等待表格渲染完成

# 获取渲染后的完整页面源码
page_source <- remDr$getPageSource()[[1]]

# 解析目标表格
output <- read_html(page_source) %>%
  html_nodes(xpath='//*[@id="highcharts-data-table-1"]//table[1]') %>% 
  html_table()

# 清理进程,避免端口占用
remDr$close()
driver$server$stop()

运行注意事项:

  • 本地需提前安装Chrome浏览器
  • 若出现驱动版本不匹配问题,可将chromever参数修改为和本地Chrome版本一致的版本号

方案2:直接请求原始数据接口

你可以通过浏览器开发者工具的网络面板,筛选出站点加载BitVol数据的API接口,直接用httr包发起接口请求获取JSON格式的原始数据,无需渲染页面,爬取效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:54:03