Yahoo Finance Python API无法返回标的期权列表问题求助
解决yfinance中
stock.options返回空值的问题 问题现象
- 近期使用yfinance的
stock.options获取期权到期日列表时返回空值,2023年底前功能正常,约一月前出现此问题 - 测试QQQ、MSFT等热门标的均存在相同问题
- 已尝试升级yfinance至最新版本(含0.2.37及后续更新版),问题未解决
示例代码:
import yfinance as yf stock = yf.Ticker('MSFT') options = stock.options print("options: ", options) # 输出为空
原因分析及解决方案
1. Yahoo Finance页面结构变更
yfinance依赖抓取Yahoo Finance的页面数据,若Yahoo调整了期权数据的页面结构或接口逻辑,会导致解析失败。
临时 workaround:手动指定到期日获取期权链
若已知标的的期权到期日,可直接传入到期日字符串绕过stock.options的自动获取步骤:
import yfinance as yf stock = yf.Ticker('MSFT') # 替换为实际到期日,格式示例:"2024-06-21" opt_chain = stock.option_chain(date="2024-06-21") print("看涨期权数据:", opt_chain.calls) print("看跌期权数据:", opt_chain.puts)
2. 强制刷新数据缓存
yfinance会缓存部分数据,过期缓存可能导致获取失败,可强制刷新数据:
import yfinance as yf stock = yf.Ticker('MSFT') stock.refresh() # 强制刷新所有数据 options = stock.options print("options: ", options)
3. 模拟浏览器请求头
Yahoo可能拦截非浏览器标识的请求,可自定义请求头模拟浏览器访问:
import yfinance as yf # 设置浏览器请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' } stock = yf.Ticker('MSFT') stock._history_options['headers'] = headers options = stock.options print("options: ", options)
4. 等待官方修复
该问题大概率是Yahoo端的结构变更导致,yfinance开发者通常会跟进修复,可关注项目版本更新和issue动态。
内容的提问来源于stack exchange,提问作者Michael D
相关产品推荐
相关产品推荐

