ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

yfinance 请求被 429 限流?代理配置加请求间隔,3 步让数据拉取稳定下来

yfinance 请求被 429 限流?代理配置加请求间隔,3 步让数据拉取稳定下来 yfinance 请求被 429 限流代理配置加请求间隔3 步让数据拉取稳定下来【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance批量拉 5 只股票第 3 只开始报 429脚本直接卡死。本文给出代理配置 请求间隔 日志定位的完整改法。最小复现与快速对表这段代码连发 5 个行情请求中间没有任何间隔用来触发 Yahoo 的 IP 级限流。import yfinance as yf tickers [AAPL, MSFT, GOOG, AMZN, TSLA] for t in tickers: hist yf.Ticker(t).history(period5d) # 连发请求无间隔 print(t, len(hist)) # 第 3、4 只开始抛 YFRateLimitError 或 429本地网络正常的话一般拉到第 2、3 只就开始掉。触发不了就换更大的 period 或多发几只目的只是让 429 出现。429 不是你代码的错。Yahoo 对同一 IP 的短时请求计数超阈值直接拒。yfinance 在源码里把它转成 YFRateLimitError 抛出见 yfinance/data.py。先对表确认你属于哪类。故障现象大概率原因验证方法429 报错请求过于频繁加间隔后重跑连接超时代理地址不通单独测代理连通403 拒绝IP 被临时封禁换 IP 再试对不上号也别慌三种之外基本是网络层问题先测裸连是否通。逐条处方把代理写进全局配置代理不用写进每个请求改一次全局配置就够。这一行把代理写进全局配置后面的拉取全部走它。import yfinance as yf yf.config.network.proxy http://127.0.0.1:7890 # 全局生效 t yf.Ticker(AAPL) print(t.history(period1d))原因是这个值存在 yfinance 全局配置里所有拉取共用改一行即覆盖全部请求。代理地址要带协议头写错端口的现象是超时而不是 429。改完这一行重新跑一次。详见高级配置。给循环加一个可感知的延迟限流按 IP 计间隔拉开比换代理更直接。循环里每个请求后睡 2 秒同时打开自动重试。import time import yfinance as yf yf.config.network.retries 2 # 瞬时错误自动重试1s/2s/4s 退避 for t in [AAPL, MSFT, GOOG]: yf.Ticker(t).history(period5d) time.sleep(2) # 每个请求后停 2 秒原因是 Yahoo 按 IP 统计请求频次sleep 拉开间隔retries 兜底瞬时抖动两者配合比硬刷稳定。间隔 2 秒起步标的上百只再拉长每拉 3 只多停一次节奏更像人肉刷。打开 debug 日志看请求链路报错说不清原因时先开日志。两行配置打开详细日志再跑一次同样的拉取。import yfinance as yf yf.config.debug.logging True # 打开详细日志 yf.config.debug.hide_exceptions False # 不再吞异常 yf.Ticker(AAPL).history(period1d)原因是日志会打印每次请求的响应码和 cookie 策略切换能直接区分限流、超时还是被封。输出走标准 logging接你自己的 handler 也行。定位完记得关掉别把详细日志留到生产。配置方法见日志文档。边界与下一步⚠️ 以下情况上面改法不生效别硬扛Yahoo 地域封锁靠代理绕不过去只能换数据源sleep 压到 0.1 秒以下等于没加间隔要有感知retries 只兜瞬时错误429 持续出现就停手缓存只省重复请求不解决限流本身见缓存文档一次只改一处挂了就先查日志别三处同时动完整文档在 doc/source/index.rst所有配置项都有说明。【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表