スキップしてメイン コンテンツに移動

[Python]個別銘柄の時系列データをGoogle Financeから取得するプログラム

今日書いたのはこれ。

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')


コメント

このブログの人気の投稿

[Mac]Time Machineのバックアップ先をWindows共有フォルダに設定する

こんばんは。もっくんです。 2台あったWindowsのデスクトップを1台にまとめるついでに、ずっと放置していたMacのバックアップ環境を構築してみました。Finderでコピペするだけでいいんですが、どうせなら「Mac全体を自動的にバックアップします。」という謳い文句のTime Machineを使いたい。 Apple純正のTime CapsuleやUSBの外付けHDDという手もあったんですが、ノートの機動性を落としたくなかったし、なによりタダでできそうなWindows共有フォルダにネットワーク越しにバックアップする方法を取ることにしました。 実際の流れは下記のようになります。 ネットワーク共有フォルダを作成する 空のディスクイメージを作成する ネットワーク共有フォルダにディスクイメージをコピーする ネットワーク共有フォルダのディスクイメージをマウントする マウントしたディスクイメージをTime Machineのバックアップ先に指定する 1.ネットワーク共有フォルダを作成する この手順はそこまで面倒ではないので、簡単な手順だけ。 Windows全体の設定でファイル共有を有効にする(Windowsで作業) Macと共有(Macから見えるように)したいフォルダを作成する(Windowsで作業) 共有したいフォルダに共有設定をする(Windowsで作業) 共有フォルダに接続(Macで作業) 詳細はこちらの記事が画像付きでわかりやすい。 http://blog.goo.ne.jp/beosound/e/7d6d0d0a8f76035f880001eda06c4247 2.空のディスクイメージを作成する いわばこのディスクイメージがバックアップ先のHDDの代わりとなる。 アプリケーション > ユーティリティ > ディスクユーティリティを起動 画面上部の ファイル > 新規 > 空のディスクイメージをクリック 設定画面の各欄は以下のように設定 名前: TimeMachineVolume(なんでもよい) 保存先: デスクトップ(ローカルのわかりやすい場所) ボリューム名: TimeMachineVolume(なんでもよい) ボリュームサイズ: カスタム

[Python]redis-pyでRedis Pub/Sub実装

前から面白そうと思っていたRedisのPub/Sub機能。 redis-pyでどう実装すれば使えるか確認してみた。 ■Pub/Subについて http://ja.wikipedia.org/wiki/出版-購読型モデル ■pub.py from redis import StrictRedis def publish(channel,msg): """ redis-pyにはPUBLISHするためのメソッドがないので、 Redisのコマンドをそのまま実行する為のクラスを使う。 """ sr=StrictRedis() """ 第1引数にRedisのコマンド、第2引数以降は そのコマンドの引数をそのままセット """ sr.execute_command("PUBLISH",channel,msg) if __name__=="__main__": # チャネル"hoge"に"Hello"というメッセージを出版(Publish) publish("hoge","Hello") ■sub.py from redis import Redis def listen(channel): r=Redis() ps=r.pubsub() ps.subscribe(channel) while True: for i in ps.listen(): print i["data"] if __name__=="__main__": # チャネル"hoge"を購読(Subscribe) listen("hoge") ■実行方法・実行結果 (ターミナル1-準備) [user@localhost ~]# python sub.py 1 # => チャネ