今日書いたのはこれ。
Google Financeから証券コードを指定して日別の価格情報を取得するプログラムです。
米国市場に上場している銘柄であればCSVでダウンロードでますが、日本の銘柄はできなかったので作りました。
多くの人はYahoo!Japanから取得しているようなので、あえてGoogle Financeから取得してみました。
ちなみに使えるのは東証に上場している銘柄のみです。(おそらく)
このプログラムと日経225構成銘柄一覧取得プログラムを組み合わせれば、日経225構成銘柄の時系列データが取得できてしまいます。
Google Financeから証券コードを指定して日別の価格情報を取得するプログラムです。
米国市場に上場している銘柄であればCSVでダウンロードでますが、日本の銘柄はできなかったので作りました。
多くの人はYahoo!Japanから取得しているようなので、あえてGoogle Financeから取得してみました。
ちなみに使えるのは東証に上場している銘柄のみです。(おそらく)
このプログラムと日経225構成銘柄一覧取得プログラムを組み合わせれば、日経225構成銘柄の時系列データが取得できてしまいます。
#!/usr/local/bin/python
# -*- coding:utf-8 -*-
from BeautifulSoup import BeautifulSoup
import urllib2,re,datetime,sys
class googleFinance2CSV(object):
def __init__(self,ticker):
'''
引数で渡されたticker(=証券コード)の時系列データを
Google Financeから取得してCSV形式で保持する
CSVの列は'Date','Open','High','Low','Close','Volume'
'''
self.ticker = ticker
self.url = 'http://www.google.com/finance/historical?q=%s&num=200' % str(self.ticker)
self.csv = str()
soup = BeautifulSoup(urllib2.urlopen(self.url))
tablesoup = soup.find("table", {"class":"gf-table historical_price"})
for trsoup in tablesoup.findAll("tr"):
if len(self.csv)==0:
tdsoups = trsoup.findAll("th")
else:
tdsoups = trsoup.findAll("td")
self.csv +=re.sub(r'\n','',','.join([re.sub(r',','',tdsoup.find(text=True)) if tdsoup.find(text=True) else '' for tdsoup in tdsoups])) +'\n'
#日付が'Sep 7 2011'形式になっているので'20110907'形式に直す
rows = [row.split(',') for row in self.csv.split('\n')]
for row in rows:
if row[0] == 'Date':
self.csv = ','.join(row)+'\n'
elif row[0] <> '':
self.csv += datetime.datetime.strftime(datetime.datetime.strptime(row[0],'%b %d %Y'),'%Y%m%d')+','+','.join(row[1:])+'\n'
def savefile(self,filepath):
'''
引数で渡されたfilepath(=保存先ファイル名のフルパス)に
CSV形式で保存する
'''
f = open(filepath,'w')
f.write(self.csv)
f.close()
if __name__=='__main__':
'''
コマンドラインで以下のように実行する
"python googlefinance2csv.py TYO:xxxx"のxxxxに証券コードを入れる
Cドライブの直下に'TYOxxxx.csv'というファイルができる
'''
gf2csv = googleFinance2CSV(sys.argv[1])
gf2csv.savefile('C:\\'+re.sub(r':','',sys.argv[1])+'.csv')
コメント
コメントを投稿