拓冰建站拓冰建站
首页 / 资讯中心 / 正文

用 yfinance 下载 Yahoo 行情数据:环境体检到批量修复的完整清单

用 yfinance 下载 Yahoo 行情数据环境体检到批量修复的完整清单【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinanceyfinance 是开源的 Yahoo Finance 行情下载工具几行代码就能把 K 线、分红、拆股数据拉进 pandas DataFrame。适合需要批量取数、又常被脏数据和限流卡住的 Python 数据工程师。环境体检与一键部署装之前先查一遍环境确认解释器版本和依赖是否打架python --version python -m pip check # 确认 Python 版本探测依赖冲突⚠️ 最高频的坑是双 Python 版本机器同时装了 Python 2/3 时裸pip会把包装进另一个解释器。解法是所有命令都带python -m pip前缀确保装进当前正在跑的 Python。第二个坑是代理变量只在某个终端生效换个 shell 请求就变直连——代理要在跑任务前的同一个 shell 里设置。安装就两条命令python -m pip install yfinance --no-cache-dir # 安装核心禁用缓存避免旧版本冲突python -m pip install yfinance[repair] # 价格修复所需的 scipy 与 scikit-learn只拉美股日线可以跳过第二条碰非美股交易所、想开 repair 的装上它。装完做一次冒烟测试版本号和一个真实请求都得回来import yfinance as yf print(yf.__version__) # 确认已装版本 df yf.Ticker(AAPL).history(period5d) print(len(df)) # 0 说明 API 与网络都通如果len(df)打出 0 或超时先别怀疑代码ping 一下 finance.yahoo.com 看连通性再确认代理变量真的生效最后才考虑库本身的问题。高频场景从单点取数到批量管道使用频率最高的是拉单个标的日线直接进 DataFrame 做分析import yfinance as yf df yf.Ticker(AAPL).history(period1y, interval1d) # 一年日线 print(df[[Open, High, Low, Close]].tail())返回是时间序列索引加 OHLC、Dividends、Split Events 列索引自带交易所时区可以直接 resample。用period代替手写 start/end 能少很多参数错误5d、1mo、1y都是内置值。标的量一多就换成 downloadticker 用空格分隔自带并发data yf.download(AAPL MSFT GOOG, period1y, threadsTrue, # 并发下载提速 group_byticker) # 列的第一层是标的 print(data[AAPL][Close].tail())注意多个标的时列是双层结构ticker、字段取数固定用data[ticker][field]存 CSV 前要先处理多级列索引详见 doc/source/advanced/multi_level_columns.rst。Yahoo 返回的数据并不总是干净的非美股交易所尤其常见分红调整缺失、拆股没生效、价格差 100 倍。repairTrue会自动检测并修复df yf.download(1398.HK, period1y, repairTrue) # 自动修复分红/拆股调整错误 print(df[[Close, Adj Close, Dividends]].tail())修复过的行会标在Repaired?列里请求多日区间时它会先拉 1d 修复再重采样顺带解决 Yahoo 多日调整逻辑的缺陷。报错自救三个最卡人的故障症状抛YFRateLimitError: Too Many Requests. Rate limited。根因短时间请求过多被 Yahoo 限流。修复开自动重试把整体节奏放慢。import time import yfinance as yf yf.config.network.retries 2 # 瞬时错误按 1s/2s/4s 指数退避重试 time.sleep(60) # 被限流后先等一分钟再恢复管道 df yf.download(^GSPC, period1mo)批量跑多个标的时请求之间再留 2 秒左右间隔是防 429 最稳的姿势。症状YFTickerMissingError: $XXXX: possibly delisted; no price data found。根因代码不存在或标的已退市Yahoo 很少明说原因。修复捕获跳过别让整批任务崩掉。from yfinance import Ticker from yfinance.exceptions import YFTickerMissingError try: df Ticker(XXXX).history(period1y) except YFTickerMissingError: print(skip: 代码无效或已退市)症状Adj Close和Close完全相等中间却挂着分红行或某天价格恰好是邻日的 100 倍。根因Yahoo 自身调整缺陷伦敦交易所£/pence 混用最常见。修复开 repair并用 history_metadata 核对真实币种。t yf.Ticker(8TRA.DE) df t.history(period1y, repairTrue) # 自动修复调整错误 print(t.history_metadata.get(currency)) # 币种以此为准别用 Ticker.info让管道跑得更久节流、缓存与版本兼容节流突发请求易限流 → 请求间隔 2 秒 → 429 基本消失。import time for t in [AAPL, MSFT, GOOG]: df yf.download(t, period1y) time.sleep(2) # 批量任务之间留间隔缓存时区、cookie 反复请求 → 缓存固定路径持久化 → 重复请求变少。yf.set_tz_cache_location(/data/yf-cache) # 指定缓存目录默认在系统缓存目录版本兼容上游端点变更会让管道静默挂掉 → 报错先升级再对照 CHANGELOG → 多数问题新版已修标准动作是python -m pip install -U yfinance。合规边界大批量取数选 UTC 0–8 点非高峰同一标的请求间隔 2–5 秒缓存 TTL 建议 24 小时左右别假设数据永远新鲜。延伸与自查doc/source/官方完整文档doc/source/reference/examples/示例场景集CHANGELOG.rst版本修复记录tests/跑仓库测试 上游 API 变更导致管道突然报错时先开yf.config.debug.logging True看完整请求再翻 CHANGELOG 确认端点改动最后才怀疑自己的代码。【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门