如何使用 yfinance 检测失败的下载

Posted

技术标签:

【中文标题】如何使用 yfinance 检测失败的下载【英文标题】:How to detect failed downloads using yfinance 【发布时间】:2021-08-13 20:42:56 【问题描述】:

我正在使用 API yfinance:https://github.com/ranaroussi/yfinance

使用下面的简单代码:

data = yf.download("A AA AAA Z LOL KE QP")

我得到以下输出:

[*********************100%***********************]  7 of 7 completed

2 Failed downloads:
- LOL: 1d data not available for startTime=-2208988800 and endTime=1621954979. Only 100 years worth of day granularity data are allowed to be fetched per request.
- QP: 1d data not available for startTime=-2208988800 and endTime=1621954979. Only 100 years worth of day granularity data are allowed to be fetched per request.

我想知道如何在我的代码中检测到“LOL”和“QP”失败?

【问题讨论】:

【参考方案1】:

这是在 yfinance 包中引发“错误”的代码。这不是一个实际的错误,因此您可能想要覆盖函数 download,它相当大。

if shared._ERRORS:
    print('\n%.f Failed download%s:' % (
    len(shared._ERRORS), 's' if len(shared._ERRORS) > 1 else ''))
    # print(shared._ERRORS)
    print("\n".join(['- %s: %s' %
    v for v in list(shared._ERRORS.items())]))

编辑


如果找到获取失败下载的方法: 只需导入shared.py 文件并获取ERRORS 字典。 此 dict 存储下载方法的最后一个错误。它在下载之前被重置,因此可以在下载之后立即访问。

只需使用以下代码:

import yfinance.shared as shared

data = yf.download("A AA AAA Z LOL KE QP")
print(list(shared._ERRORS.keys()))

【讨论】:

非常感谢,它运行良好:)【参考方案2】:

在对数据输出多玩了一会儿之后,我发现了一种检查失败值的不优雅的方法,例如元素“LOL”:

all(pd.isna(v) for v in dict(data.Close["LOL"]).values())

它检查收盘价的所有值是否为 nan。

这种方法有效,但我认为不是最优的,可能有更好、更简单的方法。让我们希望有人找到它:)

【讨论】:

以上是关于如何使用 yfinance 检测失败的下载的主要内容,如果未能解决你的问题,请参考以下文章

yf.Tickers 从 yfinance 下载多个代码的信息并动态访问每个代码

使用 python yfinance 多线程下载雅虎股票历史

Yfinance:同时下载多只股票的多个参数(beta、市值等)?

无法获取数据,使用包 yfinance 按格式分组下载到熊猫数据框中,仅适用于我的子列表中的特定代码

如何抑制 yfinance 的异常?

如何从 yfinance 获取特定时间和日期的 1 分钟价格数据?