V2EX 09月29日 15:54
yfinance 接口请求频繁,提示 Too Many Requests
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

用户在使用yfinance库获取股票数据时,频繁遇到“Too Many Requests”的错误提示,怀疑是Yahoo Finance API接口限制严格。尽管确认网络连接正常,且使用了gemini cli等工具,该问题已持续半年。提供的Python代码示例尝试获取永辉超市(601933.SS)的实时价格和公司信息,但执行后即报错YFRateLimitError,显示API请求被限速。用户寻求解决此问题的方法,了解Yahoo API的限制情况并寻找替代方案。

📉 **API请求频率限制**: yfinance库在短时间内频繁调用Yahoo Finance API,导致触发了接口的请求频率限制,从而返回“Too Many Requests”错误。这表明Yahoo Finance对API的使用有严格的速率控制,以防止滥用和保障服务稳定性。

🌐 **网络环境与工具确认**: 用户已确认自身网络连接正常,并且能够使用gemini cli等工具,排除了本地网络问题或基础工具调用障碍的可能性。问题似乎直接源于API服务端的响应。

⏳ **问题持续时间长**: 该“Too Many Requests”问题已经持续了大约半年,暗示这并非一次性临时故障,而是API策略的长期存在或调整所致,需要寻找根本性的解决方案。

💡 **寻求解决方案**: 用户希望获得解决此问题的具体方法,例如是否Yahoo Finance API有官方的付费接口、是否有其他可靠的替代数据源,或者是否有更优的API调用策略来规避当前的速率限制。

这问题都出现半年了。尝试用 AI 解决,给我试了半天还都是 too many request.

我的网络是可以用 gemini cli 之类的,按理说应该不是网络问题啊。

简单测试代码如下:

import yfinance as yfimport pandas as pd# 设置永辉超市的股票代码ticker = "601933.SS"  # .SS 表示上海证券交易所# 创建 yfinance 对象stock = yf.Ticker(ticker)# 获取实时价格(最新收盘价或当前价格,视市场情况而定)current_price = stock.history(period="1d")["Close"].iloc[-1]# 获取股票的详细信息(包括公司名称等)info = stock.info# 输出结果print(f"永辉超市 ({ticker}) 的实时价格: {current_price:.2f} CNY")print(f"公司名称: {info.get('shortName', '未知')}")

运行就直接报错:

 line 11, in <module>    current_price = stock.history(period="1d")["Close"].iloc[-1]                    ^^^^^^^^^^^^^^^^^^^^^^^^^^  File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/utils.py", line 103, in wrapper    result = func(*args, **kwargs)             ^^^^^^^^^^^^^^^^^^^^^  File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/base.py", line 91, in history    return self._lazy_load_price_history().history(*args, **kwargs)           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/utils.py", line 103, in wrapper    result = func(*args, **kwargs)             ^^^^^^^^^^^^^^^^^^^^^  File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/scrapers/history.py", line 178, in history    data = get_fn(           ^^^^^^^  File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/utils.py", line 103, in wrapper    result = func(*args, **kwargs)             ^^^^^^^^^^^^^^^^^^^^^  File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/data.py", line 364, in get    return self._make_request(url, request_method = self._session.get, user_agent_headers=user_agent_headers, params=params, timeout=timeout)           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/utils.py", line 103, in wrapper    result = func(*args, **kwargs)             ^^^^^^^^^^^^^^^^^^^^^  File "/opt/anaconda3/lib/python3.12/site-packages/yfinance/data.py", line 424, in _make_request    raise YFRateLimitError()yfinance.exceptions.YFRateLimitError: Too Many Requests. Rate limited. Try after a while.

这要怎么解决呢,难道 yahoo 的 API 封这么严重啊。有没有知道怎么解决的老兄啊,感谢!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

yfinance Yahoo Finance API Too Many Requests API Rate Limit 股票数据 Python 数据获取
相关文章