TOPIXを取得したい

まず、適当にAPIとかあるのかななどと考え調べたが見つからなかった。次に東京証券取引所のトップページhttp://www.tse.or.jp/をパースして取得できるのではと考えて、該当するDOMノードのタグidをfirebugのピックアップの機能を使って取得した("topixdata", 156行目)。次にpythonからBeautifulSoupライブラリを使って取得しようとしたところ、該当タグの中は空のテキストであった。

どうやらjavascriptでこの部分を初期化しているな、と推測し、Ctrl+uでソースを確認したところ、13行目に

<script type="text/javascript" src="topix.js" charset="utf-8" ></script>

という如何にもな箇所を発見した。ブラウザのアドレスバーにurlをタイプしてソースを確認したところ、どうやら以下のurlにあるテキストファイルに最新のTOPIXが保存されているようだった。

http://www.tse.or.jp/market/topix.dat

このテキストを見るだけならトップページ全体を読んでパースして抽出する必要も無くサーバへの負担はずっと少なそうだ。

import urllib
import datetime

conn = urllib.urlopen("http://www.tse.or.jp/market/topix.dat")
cont = conn.read()

lst = cont.split("&nbsp;")
lst[1] = lst[1].split(">")[1].split("<")[0]
lst[2:4] = [lst[2] + " " + lst[3]]

conv = [float,
        float,
        lambda x: datetime.datetime.strptime(conn.headers["date"][12:16]+"/"+x, "%Y/%m/%d %H:%M")
        ]
lst = [conv[i](lst[i]) for i in range(len(lst))]

topix = dict(zip(["value", "ratio", "date"], lst))

print "rawdata:", cont
print "parsed:", topix
print """*** TOPIX ***
value : %(value)s
ratio : %(ratio)s
date  : %(date)s
""" % topix

出力結果

$ python topix.py
rawdata: 872.29&nbsp;<font color="#00BD0D">-0.15</font>&nbsp;11/11&nbsp;15:00
parsed: {'date': datetime.datetime(2009, 11, 11, 15, 0), 'ratio': -0.14999999999999999, 'value': 872.28999999999996}
*** TOPIX ***
value : 872.29
ratio : -0.15
date  : 2009-11-11 15:00:00