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

使用R语言爬取CoinMarketCap加密货币历史数据失败如何解决

问题根因
  • 你抓取的页面属于JavaScript动态渲染类型:CoinMarketCap的历史价格数据不会直接写在初始HTML里,而是页面加载完成后通过异步请求拉取数据再渲染到表格中。rvest的read_html()只能获取未执行JS的初始静态HTML,此时你XPath对应的表格元素还不存在,自然返回空数据集。
  • 你使用的绝对XPath可靠性极低:即使页面是静态的,只要平台调整前端DOM结构,该路径就会失效,更推荐用元素的class、id等特征做相对定位。
可落地的解决方案

方案1:调用官方API(首推)

CoinMarketCap提供官方开放API可以直接获取结构化的历史价格数据,无需解析页面,稳定性最高。免费额度足够个人非商用场景使用,注册账号获取API密钥后即可调用,返回的JSON格式数据处理成本极低。

方案2:使用支持JS执行的爬取工具

如果必须爬取页面内容,可换用RSelenium等可以模拟浏览器运行的工具,等待页面完全渲染后再提取数据,参考代码如下:

# 提前安装RSelenium包,配置与本地浏览器版本匹配的驱动
library(RSelenium)
library(rvest)
library(magrittr)

# 启动Chrome浏览器实例
driver <- rsDriver(browser = "chrome", chromever = "你的本地Chrome浏览器版本号")
remDr <- driver$client
remDr$navigate("https://coinmarketcap.com/currencies/bitcoin/historical-data/")

# 等待页面完成渲染,可根据网络情况调整等待时长
Sys.sleep(3)

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

# 提取表格数据,用table标签或者对应class定位比绝对XPath更稳定
price_df <- page_html %>%
  html_element(css = "table") %>%
  html_table() %>%
  as.data.frame()

# 关闭浏览器实例和驱动
remDr$close()
driver$server$stop()

方案3:直接抓取异步数据接口

打开浏览器开发者工具的「网络」面板,筛选「Fetch/XHR」类型请求,刷新页面后找到返回历史价格数据的接口,直接用httr包调用该接口获取数据,比模拟浏览器更轻量高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:54:01