web-dev-qa-db-ja.com

pythonでyahoo Financeから履歴株価を自動的にダウンロードする

Yahoo FinanceまたはGoogle Finance(csv形式)から株価の履歴価格を自動的にダウンロードする方法はありますか?できればPythonで。

44
Bob

簡単な答え:はい。 Pythonの rllib を使用して、必要な銘柄の履歴データページを取得します。 Yahoo!で行くファイナンス; Googleは、信頼性が低く、データの範囲が狭く、一度使用すると制限が厳しくなります。また、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()
40
Joe C.

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 package を使用する必要があります。でインストール:

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 Financeからのダウンロードもサポートされています。

pandas-datareaderのドキュメントに詳細があります

103
Def_Os

拡張 @ Def_Os's 実際のデモで答える...

@Def_Osがすでに言っているように、 Pandas Datareader を使用すると、このタスクが本当に楽しくなります

In [12]: from pandas_datareader import data

AAPLの利用可能なすべての履歴データを1980-01-01から開始

#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
...
15
MaxU

Python yahoo_financeというライブラリが既に存在するため、最初に次のコマンドラインを使用してライブラリをダウンロードする必要があります。

Sudo pip install yahoo_finance

次に、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")

これでうまくいくはずです。動作するかどうか教えてください。

更新:yahoo_financeライブラリはサポートされなくなりました。

8
Naufal

Yahoo_finパッケージを確認できます。 Yahoo FinanceがAPIを変更した後に最初に作成されました(ドキュメントはこちら: http://theautomatic.net/yahoo_fin-documentation )。

from yahoo_fin import stock_info as si

aapl_data = si.get_data("aapl")

nflx_data = si.get_data("nflx")

aapl_data.head()

nflx_data.head()

aapl.to_csv("aapl_data.csv")

nflx_data.to_csv("nflx_data.csv")
4
atreadw