yfinance 请求被 429 限流?代理配置加请求间隔,3 步让数据拉取稳定下来
2026/9/5 17:09:27 网站建设 项目流程

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

【免费下载链接】yfinanceDownload market data from Yahoo! Finance's 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(period="5d") # 连发请求,无间隔 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(period="1d"))

原因是这个值存在 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(period="5d") 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(period="1d")

原因是日志会打印每次请求的响应码和 cookie 策略切换,能直接区分限流、超时还是被封。输出走标准 logging,接你自己的 handler 也行。定位完记得关掉,别把详细日志留到生产。配置方法见日志文档。

边界与下一步

⚠️ 以下情况上面改法不生效,别硬扛:

  • Yahoo 地域封锁靠代理绕不过去,只能换数据源
  • sleep 压到 0.1 秒以下等于没加,间隔要有感知
  • retries 只兜瞬时错误,429 持续出现就停手
  • 缓存只省重复请求,不解决限流本身,见缓存文档
  • 一次只改一处,挂了就先查日志,别三处同时动

完整文档在 doc/source/index.rst,所有配置项都有说明。

【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询