bloombergからWTI原油の価格を取得するスクリプト
# 2008/09/04 bloombergのいろいろな指数を取得するスクリプト require 'mechanize' require 'kconv' # 0.初期設定 agent = WWW::Mechanize.new def write(arr) f = open("C:/share/03_scr/bloomberg/bloomberg.txt", "a") f.write(arr.join("\t")) f.write("\n") f.close end # 1.bloombergにアクセス page = agent.get('http://www.bloomberg.com/markets/commodities/energyprices.html') #page = agent.get('http://www.bloomberg.com/markets/asia_index.html') arr = [] # 1.span classで回す (page/"span").each do |text| # 2.tbl_txtクラスかつ最後の一文字が英文字かどうか←(前日と価格が変わらなかったときの対策) if text.to_html =~ /<span class="tbl_txt">.*/ && text.inner_text =~ /^.*\w$/ # 1.今まで溜まっている単語列が5個かどうか? if arr.size < 5 # 1.4個以下なら不正な行としてその行を削除 arr = [] arr << text.inner_text elsif arr.size == 5 # 2.5個なら結果出力 write(arr) arr = [] arr << text.inner_text else # 3.6個以上なら6番目以降の要素を削って出力 arr = arr.slice(0..4) write(arr) arr = [] end else # 3.それ以外のクラスなら配列に代入 arr << text.inner_text end end
Webアクセスまでは楽勝だけど、その後の文字整形(成型?)が大変。
ちゃんとタグ分けされてないのでまずspanクラスを全部取り出す。
その中で指数クラスが所属するtbl_txtクラスをキーにして整形。
ただしその他の要素にも同じタグが使われてるので
指数,価格,前日比,前日比(%),データと5つの要素が揃ったときのみ
ファイルに書き出すようにした。
まぁめんどくさいといっても30分くらいで出来上がったのだが、
力技なので充実感とか知的好奇心が満たされたって感じはないなぁ。