使用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
相关产品推荐
相关产品推荐

