使用cbw包getfinmdat()获取股票数据遇HTTP 403错误求助
问题原因与解决办法
错误原因
HTTP 403是服务器拒绝访问的状态码,核心原因是Yahoo Finance调整了公开数据接口规则,旧的未授权请求方式(包括cbw包getfinmdat函数底层依赖的getSymbols.yahoo方法)不再被允许,并非完全停止提供数据服务,而是需要符合新的请求规范,导致旧代码触发权限拦截。
解决办法
- 用适配新接口的包替代:推荐使用
yfR包,它专门适配了Yahoo Finance的新接口,稳定性更强。示例代码:
library(yfR) # 抓取指定股票与指数数据 df <- yf_get(tickers = c("MSFT", "AAPL", "^GSPC"), first_date = "2001-01-01", last_date = "2021-03-31") print(df)
- 若坚持用
quantmod:可以手动添加请求头绕过反爬检测(注意此方法可能随时失效):
library(quantmod) # 设置模拟浏览器的请求头 options(quantmod.yahoo.header = c( "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" )) # 抓取数据并转为数据框 df <- getSymbols(c("MSFT", "AAPL", "^GSPC"), from = "2001-01-01", to = "2021-03-31", auto.assign = FALSE) df <- as.data.frame(df) print(df)
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

