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(" ") 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 <font color="#00BD0D">-0.15</font> 11/11 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