从大时间范围内抓取每分钟股票数据 Python
Grabbing per minute stock data from a large time range Python
所以我试图在一年的时间间隔内获取每分钟的股票数据,我知道 Google 金融 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
body['meta']['validRanges']
告诉你:
['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']
您正在请求 1Y
而不是 1y
。这个区别很重要。
顺便说一下,您可以像这样更轻松地加载时间戳:
pd.to_datetime(body['timestamp'], unit='s')
print('stock ticker: {0}'.format(get_quote_data(symbol='AAPL', data_range='1d', data_interval='1m')))
有效
所以我试图在一年的时间间隔内获取每分钟的股票数据,我知道 Google 金融 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
body['meta']['validRanges']
告诉你:
['1d', '5d', '1mo', '3mo', '6mo', '1y', '2y', '5y', '10y', 'ytd', 'max']
您正在请求 1Y
而不是 1y
。这个区别很重要。
顺便说一下,您可以像这样更轻松地加载时间戳:
pd.to_datetime(body['timestamp'], unit='s')
print('stock ticker: {0}'.format(get_quote_data(symbol='AAPL', data_range='1d', data_interval='1m')))
有效