Yahoo Finance API 在旧 URL 和 User-Agent 上给出错误 403(禁止)

Posted

技术标签:

【中文标题】Yahoo Finance API 在旧 URL 和 User-Agent 上给出错误 403(禁止)【英文标题】:Yahoo finance API gives error 403 (forbidden) on old URL and User-Agent 【发布时间】:2021-08-04 20:26:50 【问题描述】:

我使用 Yahoo Finance API 的一个用例是找出给定股票的收益日期。这在 2021 年 7 月左右之前一直运行良好,但开始出现错误 403(禁止)。

经过一段时间的努力,发现添加'User-agent': 'Mozilla/5.0' 标头可以解决问题。如果您遇到类似的问题,您可以尝试看看它是否也适合您。这是一个示例屏幕截图:

>>> url="https://query2.finance.yahoo.com/v10/finance/quoteSummary/PYPL?modules=calendarEvents"
>>> r=requests.get(url)
>>> r
<Response [403]>
>>> r=requests.get(url, headers='User-agent': 'Mozilla/5.0')
>>> r
<Response [200]>
>>> r.json()
'quoteSummary': 'result': ['calendarEvents': 'maxAge': 1, 'earnings': 'earningsDate': ['raw': 1635764340, 'fmt': '2021-11-01', 'raw': 1636113600, 'fmt': '2021-11-05'], 'earningsAverage': 'raw': 1.13, 'fmt': '1.13', 'earningsLow': 'raw': 0.97, 'fmt': '0.97', 'earningsHigh': 'raw': 1.27, 'fmt': '1.27', 'revenueAverage': 'raw': 6265160000, 'fmt': '6.27B', 'longFmt': '6,265,160,000', 'revenueLow': 'raw': 6041000000, 'fmt': '6.04B', 'longFmt': '6,041,000,000', 'revenueHigh': 'raw': 6539200000, 'fmt': '6.54B', 'longFmt': '6,539,200,000', 'exDividendDate': , 'dividendDate': ], 'error': None

【问题讨论】:

【参考方案1】:

我遇到了类似的问题。显然有两件事发生了变化:

    他们更新了网址 它们限制了特定的用户代理(Matlab 被明确拒绝)

截至 2021 年 6 月 16 日的网址是:

symbolString = 'TGT'; % look up Target prices as an example  
urlBase = 'https://query1.finance.yahoo.com/v7/finance/download/'; % base as of   6/16/2021
url = [urlBase,symbolString];  

然后我们显式设置用户代理:

options = weboptions('UserAgent',''); # as of 6/16/2021 it is enough to submit a blank user agent

【讨论】:

(1) 我没有注意到任何 URL 更改。 query2.finance.yahoo.com/v10/finance/quoteSummary 一直为我工作,并且继续工作 (2) ('UserAgent','') 对我不起作用。 'User-agent': 'Mozilla/5.0' 绝对适用于我的情况【参考方案2】:

你需要在你的环境中更新你的 python 包:

pip install yahoo-fin -U

【讨论】:

以上是关于Yahoo Finance API 在旧 URL 和 User-Agent 上给出错误 403(禁止)的主要内容,如果未能解决你的问题,请参考以下文章

Python pandas datareader 不再适用于 yahoo-finance 更改的 url

Yahoo Finance API 股票/股票代码查找只允许完全匹配

使用 yahoo Finance 的 bs4 读取 url

yahoo Finance api 股票是不是返回股票期权数据?

由于跨域功能,无法从我的网站的 yahoo Finance api 获取结果

如何从Yahoo Finance中解析类似JSON的数据?