R语言rvest爬取比特币BitVol指数HTML表格返回空列表问题求助
问题根因
rvest仅支持抓取页面初始加载时就存在的静态HTML内容。目标站点的BitVol数据由JavaScript动态渲染生成,你要找的highcharts-data-table-1表格,只有手动点击「View data table」按钮后才会被插入到页面DOM结构中,初始请求返回的HTML源码里不存在该元素,因此xpath匹配不到内容,最终返回空列表。
可行解决方案
方案1:通过RSelenium模拟浏览器操作(推荐,适配性高)
该方案模拟真实浏览器行为,触发按钮点击后等待动态内容渲染完成再抓取,代码示例如下:
- 先安装依赖包:
install.packages(c("RSelenium", "wdman"))
- 爬取代码:
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
相关产品推荐
相关产品推荐

