如何提升yfinance库调用Yahoo Finance API的速率限制
2025-05-13 02:46:59作者:傅爽业Veleda
背景介绍
yfinance是一个流行的Python库,用于从Yahoo Finance获取金融市场数据。许多开发者使用它来构建金融分析工具、交易策略和投资组合管理系统。然而,在使用过程中,用户经常会遇到API调用速率限制的问题。
默认速率限制问题
Yahoo Finance对免费API用户实施了严格的调用限制。根据用户报告,免费账户通常有以下限制:
- 每分钟约100次请求
- 每天约2000次请求
- 对高频请求会实施临时封禁
这些限制对于需要大量数据的研究或交易系统来说可能远远不够。
解决方案
1. 使用缓存机制
实现本地缓存是减少API调用的有效方法:
from datetime import datetime, timedelta
import pandas as pd
import yfinance as yf
# 简单缓存实现
cache = {}
CACHE_EXPIRY = timedelta(hours=1)
def get_cached_data(symbol, period="1d"):
now = datetime.now()
if symbol in cache:
data, timestamp = cache[symbol]
if now - timestamp < CACHE_EXPIRY:
return data.copy()
# 缓存不存在或已过期
data = yf.download(symbol, period=period)
cache[symbol] = (data.copy(), now)
return data
2. 升级到Yahoo Finance Premium
Yahoo Finance提供付费订阅服务,主要优势包括:
- 更高的API调用限制(Premium用户可达5000次/天)
- 更稳定的数据连接
- 更长的历史数据访问权限
3. 实现认证请求
对于Premium用户,需要在请求中添加认证信息:
import yfinance as yf
# 设置认证cookie或token
yf.set_cookies("your_premium_cookie_here")
# 或者使用登录凭证
yf.set_credentials(username="your_username", password="your_password")
4. 请求合并与批处理
将多个请求合并为一个批次可以减少API调用次数:
# 批量获取多个股票数据
symbols = ["AAPL", "MSFT", "GOOG", "AMZN"]
data = yf.download(symbols, group_by="ticker")
5. 实现速率限制控制
即使升级了账户,仍需遵守Yahoo的速率限制:
import time
from ratelimit import limits
# 设置每分钟最多100次调用
@limits(calls=100, period=60)
def safe_yfinance_call(symbol):
return yf.Ticker(symbol).history(period="1y")
最佳实践建议
- 优先使用缓存:对不常变化的数据实施本地缓存
- 合理规划请求时间:避免在短时间内集中发送大量请求
- 使用批处理:尽可能合并多个数据请求
- 监控使用情况:记录API调用次数,避免意外超出限制
- 考虑备用数据源:在达到限制时切换到备用数据源
注意事项
即使采取了上述措施,Yahoo Finance仍可能随时调整其API政策。对于关键业务应用,建议:
- 实现优雅降级机制
- 考虑使用多个数据源
- 对重要数据实施本地持久化存储
通过合理规划和优化,可以显著提高yfinance库的使用效率,满足大多数金融数据分析需求。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0190
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0113
Step-3.7-FlashStep-3.7-Flash是一个拥有 1980 亿参数的稀疏混合专家(MoE)视觉语言模型,由 1960 亿参数的语言主干网络和 18 亿参数的视觉编码器组合而成,具备原生图像理解能力。Python00
JoyAI-EchoJoyAI-Echo,这是一个独立的、仅用于推理的版本,旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。其性能的核心在于,一个跨模态视听记忆库能够在长达五分钟的视频中保持角色外观和语音音色的一致性。同时,一个训练后处理流程将基于记忆的强化学习与分布匹配蒸馏相结合,实现了7.5倍的速度提升,显著增强了视觉质量和对齐效果。00
omega-aiOmega-AI:基于java打造的深度学习框架,帮助你快速搭建神经网络,实现模型推理与训练,引擎支持自动求导,多线程与GPU运算,GPU支持CUDA,CUDNN。Java04
llm-universe本项目是一个面向小白开发者的大模型应用开发教程,在线阅读地址:https://datawhalechina.github.io/llm-universe/Jupyter Notebook08
项目优选
收起
deepin linux kernel
C
32
16
暂无描述
Dockerfile
762
4.95 K
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
1.79 K
190
暂无简介
Dart
1 K
259
Ascend Extension for PyTorch
Python
717
867
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
855
1.91 K
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.07 K
1.09 K
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.73 K
1.02 K
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
675
1.32 K
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
455
438