R语言爬取Coinbase Pro时html_nodes返回{xml_nodeset (0)}如何解决
爬取Coinbase Pro返回空节点的修复方案
拿到空节点的核心原因是Coinbase Pro市场页的数据是前端JavaScript动态渲染生成的:read_html()只能拿到页面初始的静态HTML骨架,你要的加密货币列表、.dOEGza类对应的元素,都是页面加载完成后JS请求后端接口数据,再动态插入到DOM里的,静态请求自然找不到对应节点。
另外注意:你用的.dOEGza是前端框架生成的哈希类名,这类类名会随网站版本迭代随时变更,就算你拿到了渲染后的页面,后续网站更新也会导致选择器失效,不推荐用这类随机类名做定位。
修复方案
方案1:使用无头浏览器模拟页面渲染
用R的RSelenium包启动无头浏览器,等页面完全渲染后再提取节点,示例代码如下:
# 安装加载依赖包 # install.packages("RSelenium") # install.packages("rvest") library(RSelenium) library(rvest) # 启动无头Chrome,chromever参数需替换为你本地Chrome对应的版本号 driver <- rsDriver( browser = "chrome", chromever = "替换为你的Chrome版本号", extraCapabilities = list( chromeOptions = list(args = c("--headless", "--disable-gpu")) ) ) remDr <- driver$client # 访问目标页面 remDr$navigate("https://pro.coinbase.com/markets") # 等待页面渲染完成,可根据网络情况调整等待时长 Sys.sleep(3) # 获取渲染后的完整页面源码 pg <- read_html(remDr$getPageSource()[[1]]) # 提取目标节点 target_nodes <- html_nodes(pg, '.dOEGza') # 操作完成后关闭驱动 remDr$close() driver$server$stop()
方案2:直接调用官方公开接口(更推荐)
Coinbase Pro本身提供公开的市场数据接口,不需要爬取页面,不会触发反爬策略,数据结构稳定、获取效率更高,示例代码如下:
# 安装加载依赖包 # install.packages("httr") # install.packages("jsonlite") library(httr) library(jsonlite) # 请求公开产品接口,直接获取所有加密货币交易对完整信息 res <- GET("https://api.exchange.coinbase.com/products") data <- fromJSON(content(res, as = "text")) # 直接提取加密货币名称等所需字段 coin_names <- data$base_currency
内容的提问来源于stack exchange,提问作者mehrdadorm
相关产品推荐
相关产品推荐

