【问题标题】:Grabbing per minute stock data from a large time range Python从大时间范围Python中获取每分钟的股票数据
【发布时间】:2019-04-07 06:39:36
【问题描述】:

所以我试图在一年的时间间隔内获取每分钟的股票数据,我知道 Google Finance API 不再工作,所以我做了一些挖掘,我从一个旧的 github 线程中找到了一些代码,可以找到雅虎财经数据5天内的范围;但是,即使我输入了默认为 1 天的“1Y”之类的关键字,它也不再这样做了。下面是代码:

import requests
import pandas as pd
import arrow
import datetime
import os

def get_quote_data(symbol='AAPL', data_range='5d', data_interval='1m'):
    res = requests.get('https://query1.finance.yahoo.com/v8/finance/chart/{symbol}?range={data_range}&interval={data_interval}'.format(**locals()))
    data = res.json()
    body = data['chart']['result'][0]    
    dt = datetime.datetime
    dt = pd.Series(map(lambda x: arrow.get(x).datetime.replace(tzinfo=None), body['timestamp']), name='Datetime')
    df = pd.DataFrame(body['indicators']['quote'][0], index=dt)
    dg = pd.DataFrame(body['timestamp'])    
    df = df.loc[:, ('open', 'high', 'low', 'close', 'volume')]
    df.dropna(inplace=True)     #removing NaN rows
    df.columns = ['OPEN', 'HIGH','LOW','CLOSE','VOLUME']    #Renaming columns in pandas

    return df

【问题讨论】:

    标签: python pandas finance yahoo-finance


    【解决方案1】:

    body['meta']['validRanges']告诉你:

    ['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']
    

    您请求的是1Y 而不是1y。这种差异很重要。

    顺便说一句,您可以像这样更轻松地加载时间戳:

    pd.to_datetime(body['timestamp'], unit='s')
    

    【讨论】:

    • 我尝试了 '1y',但出现以下错误:文件“grab_data.py”,第 78 行,在 中 data = get_quote_data('AAPL', '1y', '1m')文件“grab_data.py”,第 26 行,在 get_quote_data body = data['chart']['result'][0] TypeError: 'NoneType' object is not subscriptable
    • 不要束手无策。不要期望复制粘贴代码,将错误一一复制粘贴到堆栈溢出中,然后重复。调查。在这种情况下,API 给你的错误信息是什么?提示:您可以使用res.raise_for_status()在发生错误时自动抛出异常。
    • raceback(最近一次调用最后一次):文件“grab_data.py”,第 80 行,在 中 data = get_quote_data('AAPL', '1y', '1m') 文件“grab_data. py”,第 25 行,在 get_quote_data print(res.raise_for_status()) 文件“/usr/local/lib/python3.7/site-packages/requests/models.py”,第 939 行,在 raise_for_status 中引发 HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 422 Client Error: Unprocessable Entity for url: query1.finance.yahoo.com/v8/finance/chart/…
    • 哦,我明白了,我最多只能执行 7 天的每分钟请求。该死的,太糟糕了。
    【解决方案2】:
    print('stock ticker: {0}'.format(get_quote_data(symbol='AAPL', data_range='1d', data_interval='1m')))
    

    作品

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多