Python
Python3
Finance

FRBの金利データをRSSから抜き出してみる

はじめに

 ここのところ、どうしてもアメリカの金利が気になる。だが、毎日確認するのも非常に面倒だ。一応イールドカーブを確認するサイトはあるのだが、他のデータとの比較がし辛い。
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")とすれば解決するようだ。
 それで、動くコードはこちら。

test.py
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年ものまでをまとめて抜き出せるようにしたい。