非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Pythonで為替情報をスクレイピングする方法(BeautifulSoup)

      2018/01/10

PythonはWeb上のデータをスクレイピングするのがとても楽ちんでです。BeautifulSoupというライブラリを使います。

広告

まずはライブラリBeautifulSoupをインストール

Pythonでスクレイピングできる便利なライブラリ「BeautifulSoup」を使います。まずはそれをインストールしましょう。pipコマンドを使います。

#Windowsの場合
pip install beautifulsoup4

#Linuxの場合
pip3 install beautifulsoup4
 

 

さっそくスクレイピング!

Yahoo!ファイナンスの以下のページからドル円の値をGETしてみましょう。

 

まず、WebページのHTMLの中のどこにあるか確認する必要があります。Chromeブラウザの場合、為替額のところで右クリックして、「検証」を選びます。

 

すると、右側にHTMLタグが現れるのですが、右クリックした個所を示してくれています。

 

この中の、class="stoksPrice"という部分を覚えておきましょう。

スクレイピングするソースコードはこちらです。(1)のところを見ていただくとわかりますが、stoksPriceを指定しています。

from bs4 import BeautifulSoup
import urllib.request as req

url="https://stocks.finance.yahoo.co.jp/stocks/detail/?code=usdjpy"
res = req.urlopen(url)

soup = BeautifulSoup(res, 'html.parser');
d1 = soup.select_one(".stoksPrice").string #(1)
print(d1)
 

 

これを実行すると以下の通りドル円の価格がGETできました。

 

ただ、このページは秒単位のリアルタイムでは価格が更新されないのが欠点です。次はリアルタイムに為替額が変わるページでやってみましょう

ページはこちらです。FXページなので常に価格が更新されます。

 

赤い丸のところを検証してみると、要素名はUSDJPY_detail_bidとなっていました。なので、先ほどの(1)のところを、d1 = soup.select_one("#USDJPY_detail_bid").stringに変えましょう。

 

実行した結果がこちら。Noneと出てしまっています。為替額が取得できませんでした。

 

これは、USDJPY_detail_bid要素の中に子要素largeがあるからで、文字列として取得できないからです。

 

 

以下のようにソースコードを変えてみましょう。

from bs4 import BeautifulSoup
import urllib.request as req

url="https://info.finance.yahoo.co.jp/fx/detail/?code=USDJPY=FX"
res = req.urlopen(url)

soup = BeautifulSoup(res, 'html.parser');
vals = soup.select_one("#USDJPY_detail_bid").findAll(text=True)
d1=''.join(vals)

print(d1)
 

 

これを実行すると以下の通りGETできました。

 

vals = soup.select_one("#USDJPY_detail_bid").findAll(text=True)

で、[112.]と[30]と[9]の配列データが得られます。なので、その次で

d1=''.join(vals)

と配列を結合することで文字列に変換したわけですね。

 

この本はかなりお勧めです。

 

広告

 - Python