定期抓取雅虎财经

Posted

技术标签:

【中文标题】定期抓取雅虎财经【英文标题】:Scraping Yahoo Finance at regular intervals 【发布时间】:2020-09-10 12:49:06 【问题描述】:

我是网络抓取的新手,需要抓取 yahoo Finance 以获取股票数据。我能够抓取他们的历史数据,但是他们的最高频率是 1 天的间隔,我正在寻找更高的频率(大约 30 分钟到 1 小时)。不幸的是,雅虎财经和其他金融网站(据我调查)不会免费发布高于 1 天的频率。 我获得更高频率的解决方案在于 yahoo Finance 为每只股票提供的图表功能,如下所示:

如您所见,当您沿 x 轴移动时,十字准线跟随数据线,左上角的图例会更改相关信息(开盘价、最高价、最低价、收盘价、成交量、百分比变化) .因此,理想情况下,我每天都会查看一家公司过去 24 小时的数据图表,然后在我将光标从左向右移动时以某种方式阅读左侧的图例。

在开始之前,我想知道 (a) 是否有人已经这样做了,或者 (b) 是否有一些有用的资源可以让这更容易。

谢谢!

【问题讨论】:

嗨,你知道alphavantage.co 吗? 我认为 yfinance 库可能有用。这是它的链接 - pypi.org/project/yfinance 我认为每个请求,可能能够以 1 分钟的频率获取 7 天的数据。 嘿,我能够在 10 分钟内实施您的两个解决方案,非常感谢!我什至能够获得 1 分钟的频率,这太棒了。这可能更像是一个财务问题,但为什么数据只能从上午 9 点到下午 4 点(即:16:00)提供?那是市场收盘的时候吗?我注意到这在雅虎财务图表上也是一样的。 是的,这与市场开盘和收盘时间大致一致。这也取决于您正在查看的交易所。 【参考方案1】:

yfinance 具有使用线程快速下载的下载功能。如 cmets 中所述,您可以获得 1m 的刻度数据,但只能获取 7 天的时间段。您会在下面的代码中注意到,如果您输入的值大于 7d,则会引发错误。

1 Failed download:
- SPY: 1m data not available for startTime=1589678598 and endTime=1590369798. Only 7 days worth of 1m granularity data are allowed to be fetched per request.
Empty DataFrame

9:30A-4PM 是东海岸的市场开放时间。但是您会注意到一些代码在下班后交易(例如 SPY)。您可以设置下面的“prepost”属性来考虑市场前/后市场时间定价。希望这可以帮助。

import yfinance as yf

data = yf.download(  # or pdr.get_data_yahoo(...
        # tickers list or string as well
        tickers = "SPY",

        # use "period" instead of start/end
        # valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
        # (optional, default is '1mo')
        period = "7d",

        # fetch data by interval (including intraday if period < 60 days)
        # valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
        # (optional, default is '1d')
        interval = "1m",

        # group by ticker (to access via data['SPY'])
        # (optional, default is 'column')
        group_by = 'ticker',

        # adjust all OHLC automatically
        # (optional, default is False)
        auto_adjust = True,

        # download pre/post regular market hours data
        # (optional, default is False)
        prepost = False,

        # use threads for mass downloading? (True/False/Integer)
        # (optional, default is True)
        threads = True,

        # proxy URL scheme use use when downloading?
        # (optional, default is None)
        proxy = None
    )

print(data)

结果:

[*********************100%***********************]  1 of 1 completed
                                 Open        High         Low       Close   Volume
Datetime
2020-05-14 09:30:00-04:00  278.950012  279.220001  278.769989  279.160004  5701148
2020-05-14 09:31:00-04:00  279.149994  279.670013  279.149994  279.640015   602618
2020-05-14 09:32:00-04:00  279.649994  279.709991  278.980011  278.980011   445239
2020-05-14 09:33:00-04:00  278.959991  279.059998  278.890015  278.970001   110324
2020-05-14 09:34:00-04:00  278.649994  278.869995  278.609985  278.780487   968209
....
....

更多信息:https://pypi.org/project/yfinance/

【讨论】:

以上是关于定期抓取雅虎财经的主要内容,如果未能解决你的问题,请参考以下文章

从雅虎财经下载市场数据时出错

雅虎财经 API [关闭]

雅虎财经 API 的替代品? [关闭]

从雅虎财经下载错误

如何从雅虎财经这样的网站获取数据? [关闭]

从雅虎财经获取数据[关闭]