You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Heroku平台Python脚本调用yfinance报错本地运行正常 求排查方案

问题原因

你遇到的报错本质是雅虎财经接口屏蔽了Heroku的出口IP段。本地运行时你的公网IP未被雅虎的反爬策略拦截,所以可以正常获取JSON格式的返回数据;而Heroku平台的服务器IP段早已被雅虎财经标记为爬虫高发地址,请求被拦截后返回空内容或者非JSON的错误页面,yfinance尝试解析空内容为JSON时就会抛出JSONDecodeError: Expecting value: line 1 column 1 (char 0)错误。
你可以通过Heroku CLI执行heroku run bash进入容器终端,手动执行curl -v "https://query1.finance.yahoo.com/v8/finance/chart/AAPL"确认返回内容,如果返回403状态码或者空响应,即可确认是IP被屏蔽的问题。

可行解决方案
  • 优先升级yfinance到最新版本:老版本yfinance使用的请求规则和接口适配逻辑存在缺陷,更容易触发反爬拦截。你可以修改requirements.txt中yfinance的版本要求为yfinance>=0.2.31,重新部署后测试。
  • 禁用多线程下载:yfinance默认开启的多线程下载策略会提升雅虎的反爬触发概率,调用下载接口时添加threads=1参数强制单线程请求:
hist_price_stock = yf.download(stock,start=startDay,end=tday, threads=1)
  • 配置代理转发请求:如果升级版本和禁用多线程仍然无效,说明你使用的Heroku出口IP已经被雅虎永久屏蔽,需要在调用yfinance时配置代理参数,用未被屏蔽的IP转发请求:
hist_price_stock = yf.download(stock,start=startDay,end=tday, proxy="http://你的代理地址:端口")
  • 添加重试逻辑:部分情况下拦截是临时的,你可以对yfinance的调用逻辑添加3-5次的重试机制,每次重试间隔2-3秒,规避临时限流。

内容的提问来源于stack exchange,提问作者Rapid1898

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:51:01