はじめに
ここのところ、どうしてもアメリカの金利が気になる。だが、毎日確認するのも非常に面倒だ。一応イールドカーブを確認するサイトはあるのだが、他のデータとの比較がし辛い。
Dynamic Yield Curve
そこで、プログラミングの練習ついでにPythonでスクレイピングを試してみようと考えた。
データの抜き出し
初期の考案
アメリカの金利は、FRBが毎日配信している。
Daily Treasury Yield Curve Rates
最初はこのグラフからCSSセレクタを使ってスクレイピングを、と考えたのだがあまりにめんどくさい。また、当該ページのXMLからスクレイピングすることも試したが、毎日更新されるものであることを考えると、重複データの削除等の処理が煩雑になる。
実行した案
そこで、FRBが毎日RSSで配信している金利データをスクレイピングすることにした。
Data: Selected Interest Rates (H.15)
例えば、30年もの国債の利回りは次のようなXMLで公表されている。
FRB:Data:H.15 Selected Interest Rates
コード
形式がわかったところで、早速スクレイピングしてみよう。
まずは、定石通り、urllibでリンクからXMLを抜き出す。ただ、どうやらタグに名前空間(コロンのこと)がついているため、find("value")としただけでは検索できないらしい。この問題は、find("cd:value")とすれば解決するようだ。
それで、動くコードはこちら。
import urllib.request as req
from bs4 import BeautifulSoup
url= "https://www.federalreserve.gov/feeds/Data/H15_H15_RIFLGFCY30_N.B.XML"
res=req.urlopen(url)
soup=BeautifulSoup(res,"lxml")
d=soup.item
print(d.find("cb:value").string)
出力(日によって変わります)
3.03
とりあえず今日はここまで。次は1ヶ月ものから30年ものまでをまとめて抜き出せるようにしたい。