下载历史股票价格自动从雅虎金融在Python中

有没有办法从雅虎财务或谷歌财务(CSV格式)自动下载股票的历史价格? 最好在Python中。

简短的回答:是的。 使用Python的urllib来拉取你想要的股票的历史数据页面。 跟雅虎一起去 金融; 谷歌既不太可靠,数据覆盖也较less,而且一旦拥有,就更加严格了。 另外,我相信Google明确禁止您在ToS中抓取数据。

较长的答案:这是我用来拉一个特定公司的所有历史数据的脚本。 它为特定的股票代码拉动历史数据页面,然后将其保存到由该符号命名的csv文件中。 你将不得不提供你想要的自动收报器符号列表。

import urllib base_url = "http://ichart.finance.yahoo.com/table.csv?s=" def make_url(ticker_symbol): return base_url + ticker_symbol output_path = "C:/path/to/output/directory" def make_filename(ticker_symbol, directory="S&P"): return output_path + "/" + directory + "/" + ticker_symbol + ".csv" def pull_historical_data(ticker_symbol, directory="S&P"): try: urllib.urlretrieve(make_url(ticker_symbol), make_filename(ticker_symbol, directory)) except urllib.ContentTooShortError as e: outfile = open(make_filename(ticker_symbol, directory), "w") outfile.write(e.content) outfile.close() 

当你要在Python中使用这样的时间序列时, pandas是不可或缺的。 这里有一个好消息:它带有一个Yahoo的历史数据下载器: pandas.io.data.DataReader

 from pandas.io.data import DataReader from datetime import datetime ibm = DataReader('IBM', 'yahoo', datetime(2000, 1, 1), datetime(2012, 1, 1)) print(ibm['Adj Close']) 

这里是pandas文档的一个例子。

pandas更新> = 0.19:

pandas.io.data模块已经从pandas>=0.19删除。 相反,你应该使用单独的pandas-datareader包 。 安装时使用:

 pip install pandas-datareader 

然后你可以在Python中做到这一点:

 import pandas_datareader as pdr from datetime import datetime ibm = pdr.get_data_yahoo(symbols='IBM', start=datetime(2000, 1, 1), end=datetime(2012, 1, 1)) print(ibm['Adj Close']) 

从Google财经下载也支持。

还有更多关于pandas-datareader的文档。

用实际演示扩展@ Def_Os的答案

正如@Def_Os已经说过的 – 使用Pandas Datareader使得这个任务变得非常有趣

 In [12]: from pandas_datareader import data 

1980-01-01开始,为AAPL提供所有可用的历史数据

 #In [13]: aapl = data.DataReader('AAPL', 'yahoo', '1980-01-01') # yahoo api is inconsistent for getting historical data, please use google instead. In [13]: aapl = data.DataReader('AAPL', 'google', '1980-01-01') 

前5行

 In [14]: aapl.head() Out[14]: Open High Low Close Volume Adj Close Date 1980-12-12 28.750000 28.875000 28.750 28.750 117258400 0.431358 1980-12-15 27.375001 27.375001 27.250 27.250 43971200 0.408852 1980-12-16 25.375000 25.375000 25.250 25.250 26432000 0.378845 1980-12-17 25.875000 25.999999 25.875 25.875 21610400 0.388222 1980-12-18 26.625000 26.750000 26.625 26.625 18362400 0.399475 

最后5行

 In [15]: aapl.tail() Out[15]: Open High Low Close Volume Adj Close Date 2016-06-07 99.250000 99.870003 98.959999 99.029999 22366400 99.029999 2016-06-08 99.019997 99.559998 98.680000 98.940002 20812700 98.940002 2016-06-09 98.500000 99.989998 98.459999 99.650002 26419600 99.650002 2016-06-10 98.529999 99.349998 98.480003 98.830002 31462100 98.830002 2016-06-13 98.690002 99.120003 97.099998 97.339996 37612900 97.339996 

将所有数据保存为CSV文件

 In [16]: aapl.to_csv('d:/temp/aapl_data.csv') 

d:/temp/aapl_data.csv – 5个第一行

 Date,Open,High,Low,Close,Volume,Adj Close 1980-12-12,28.75,28.875,28.75,28.75,117258400,0.431358 1980-12-15,27.375001,27.375001,27.25,27.25,43971200,0.408852 1980-12-16,25.375,25.375,25.25,25.25,26432000,0.378845 1980-12-17,25.875,25.999999,25.875,25.875,21610400,0.38822199999999996 1980-12-18,26.625,26.75,26.625,26.625,18362400,0.399475 ... 

Python中已经有一个名为yahoo_finance的库,因此您需要先使用以下命令行下载库:

 sudo pip install yahoo_finance 

然后,一旦你已经安装了yahoo_finance库,这里是一个示例代码,将从雅虎财经下载你需要的数据:

 #!/usr/bin/python import yahoo_finance import pandas as pd symbol = yahoo_finance.Share("GOOG") google_data = symbol.get_historical("1999-01-01", "2016-06-30") google_df = pd.DataFrame(google_data) # Output data into CSV google_df.to_csv("/home/username/google_stock_data.csv") 

这应该做到这一点。 让我知道如果它的作品。

Interesting Posts