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

使用Rvest爬取coinmarketcap表格仅获取部分数据的问题求助

问题原因
  • 网站采用了懒加载渲染策略,首次加载页面时仅完整渲染前10条加密货币的所有字段,剩余条目的非核心字段(如24小时涨跌幅、流通市值、交易量等)不会提前写入静态HTML,只有当页面滚动到对应条目位置时,才会通过JS请求数据并渲染到页面上。rvest只能获取首次返回的静态HTML内容,无法执行JS触发后续数据加载,因此只能拿到后序列表提前预置的名称、价格两个基础字段。
  • 部分反爬机制也会限制静态请求的返回数据量,避免批量爬取行为,静态请求默认只会返回前10条全量数据。
全量爬取解决方案

方案1:使用动态渲染工具模拟浏览器行为

用RSelenium等工具模拟真实浏览器访问,触发页面懒加载逻辑,等所有数据加载完成后再提取表格内容,代码示例如下:

library(RSelenium)
library(rvest)

# 启动Chrome驱动,需提前安装对应版本的ChromeDriver
rd <- rsDriver(browser = "chrome", port = free_port())
remDr <- rd$client
remDr$navigate("https://coinmarketcap.com/")

# 多次滚动页面到底部,触发所有懒加载数据渲染
for (i in 1:6) {
  remDr$executeScript("window.scrollTo(0, document.body.scrollHeight);")
  Sys.sleep(1.5)
}

# 提取渲染完成的页面内容解析表格
full_page <- read_html(remDr$getPageSource()[[1]])
market <- full_page %>% html_table(fill = TRUE) %>% as.data.frame()

# 关闭驱动释放资源
remDr$close()
rd$server$stop()

注意:需要提前匹配本地Chrome浏览器版本和ChromeDriver版本,避免启动失败。

方案2:直接调用后端数据接口

通过浏览器开发者工具的网络面板,抓取出加密货币列表的后端API接口,直接请求接口获取结构化JSON数据,用jsonlite包解析即可得到全量数据,这种方式效率更高、数据更稳定,不需要处理HTML解析的复杂逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:18:01