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

使用rvest爬取带加载更多按钮的TradingView页面的R实现问询

R语言爬取TradingView多页加密货币数据方案

实现原理

你现有代码只能爬取第一页的原因是:TradingView的静态页面仅渲染了首屏内容,点击「加载更多」时前端会主动调用后端公开数据接口拉取后续页的JSON格式数据,不需要解析前端页面,直接调用接口即可批量获取全量数据,全程不需要Selenium等浏览器模拟工具,纯代码即可实现。

依赖包

仅需要以下几个R常用数据处理、请求包:

  • httr 用于发送HTTP请求
  • jsonlite 用于JSON格式解析
  • dplyr、purrr 用于数据处理和批量翻页

可运行代码

1. 安装依赖(仅首次运行)

install.packages(c("httr", "jsonlite", "dplyr", "purrr"))

2. 单页数据拉取函数

library(httr)
library(jsonlite)
library(dplyr)
library(purrr)

get_tradingview_crypto <- function(start = 0, page_limit = 50) {
  # 构造请求参数,可按需调整返回字段
  query_body <- list(
    columns = c("name", "description", "close", "change", "change_abs", "market_cap", "total_volume", "circulating_supply"),
    sort = "market_cap",
    sort_order = "desc",
    limit = page_limit,
    start = start,
    type = "crypto"
  )
  
  # 发送请求
  response <- POST(
    url = "https://scanner.tradingview.com/crypto/scan",
    body = toJSON(query_body, auto_unbox = TRUE),
    content_type("application/json")
  )
  
  # 解析返回数据为数据框
  raw_data <- content(response, as = "text") |> fromJSON()
  page_df <- map_dfr(raw_data$data, ~ as.data.frame(t(.x$d), stringsAsFactors = FALSE))
  colnames(page_df) <- query_body$columns
  
  # 可选:加请求间隔避免被限流
  Sys.sleep(0.5)
  
  return(page_df)
}

3. 批量拉取64页数据

# 生成分页起始索引,按每页50条计算,64页的起始序列为0,50,100...3150
page_index <- seq(from = 0, by = 50, length.out = 64)

# 批量拉取所有页并合并为总表
full_crypto_data <- map_dfr(page_index, ~ get_tradingview_crypto(start = .x, page_limit = 50))

# 查看结果
head(full_crypto_data)

自定义调整说明

  • 可修改query_body中的columns参数,增减你需要返回的字段,比如添加24小时涨跌幅、市值、交易量等维度
  • 可调整page_limit参数,接口最高支持单次拉取1000条数据,调大可减少请求次数,提升爬取效率
  • 可调整Sys.sleep的等待时长,避免短时间请求过多被IP限流

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:45:00