Flask调用Yahoo Finance API部分股票代码返回404错误求助
排查Flask调用Yahoo Finance API返回404(Timestamp data missing)问题
排查思路
验证股票代码有效性
这类错误大多和代码不匹配Yahoo Finance收录规则有关:- 手动在Yahoo Finance官网搜索目标代码(如AMZ、PUB),确认是否存在对应股票、是否仍在交易或有历史数据。部分代码属于非美股市场,需添加后缀(如巴西市场的AMZ.SA);有些代码可能已退市,Yahoo Finance不再提供数据。
- 注意区分相似代码:比如Amazon的代码是
AMZN而非AMZ,输入错误必然返回无数据。
检查API参数合理性
不同股票的数据覆盖度有差异,冷门股票通常没有高频数据:- 避免使用过小的时间范围(如几小时)和高频间隔(如1m),尝试
range=1y+interval=1d这类通用参数组合,确认能否返回数据。 - 打印完整请求URL(如
https://query1.finance.yahoo.com/v8/finance/chart/AMZ?range=1y&interval=1d),手动在浏览器访问,对比返回结果是否和代码中一致。
- 避免使用过小的时间范围(如几小时)和高频间隔(如1m),尝试
核对请求头与API规则
Yahoo Finance对请求头有校验要求:- 使用贴近真实浏览器的User-Agent(如
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36),避免使用过于简单的自动化头信息。 - 检查请求参数是否有格式错误,比如
symbol参数是否带空格、URL编码是否正确。
- 使用贴近真实浏览器的User-Agent(如
捕获完整响应信息
不要只看表面错误提示,打印完整响应内容:- 在Flask代码中添加
print(response.text)或print(response.json()),查看API返回的详细错误说明,比如是否明确提示"Symbol not found"或"No data available for this range"。
- 在Flask代码中添加
解决方法示例
如果确认是代码格式问题(需添加市场后缀),修改代码中的股票参数:
# 原代码 symbol = "AMZ" # 修改为对应市场的完整代码 symbol = "AMZ.SA"
如果是参数组合问题,调整请求参数:
params = { "symbol": symbol, "range": "1y", # 扩大时间范围 "interval": "1d" # 使用日线数据 }
内容的提问来源于stack exchange,提问作者Philip
相关产品推荐
相关产品推荐

