Seleniumを使わなくてもIEを起動して、Webページをスクレイピングすることもできますが、IEを起動することに抵抗があったり、Webスクレイピングする操作が手間だったりします。
Seleniumを使うとVBAからChromeを起動して、Webページを簡単にスクレイピングすることができます。
Seleniumのインストール方法についてはこちらをご覧ください。
今回は実際に「Yahoo!ファイナンス」のページをChromeで開いて、中国元の為替レートを取得してみます。
こちら↓↓↓
VBAを起動して参照設定
こちらはSeleniumのインストール方法でも説明しましたが、もう一度記載しておきます。
VBAを起動して、「ツール」→「参照設定」を開きます。
「Selenium Type Library」にチェックを入れて、「OK」をクリックします。
為替レートページを開く
Chromeで開くページのURLは「https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=CNY&t=JPY」です。
Sub OpenChrome() Dim Driver As New Selenium.WebDriver Driver.Start "Chrome" Driver.Get "https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=CNY&t=JPY" ' ***** ' ここで為替レートを取得 ' ***** Driver.Close Set Driver = Nothing End Sub
データ取得
データの取得はFindElementByCssメソッドを使用します。
SeleniumにはこのほかにもFindElementByTagメソッドなどデータを取得するためのメソッドがあります。
’ データの取得 Driver.FindElementByCss("CSSセレクター").Text
CSSセレクターに何をセットしたら良いのか??
Chromeのデベロッパーツールでセットする値を取得することができます。
【1】Chrome右上の「三点メニュー」→「その他ツール」→「デベロッパーツール」を起動します。
【2】要素選択モードにします。
【3】取得したい項目をクリックします。
【4】選択した項目のソース上で右クリックし、「Copy」→「Copy selector」をクリックします。
【5】クリップボードにコピーされているので、VBAの「Driver.FindElementByCss(“CSSセレクター”).Text」のCSSセレクターの部分に張り付けてください。
’ データの取得 Driver.FindElementByCss("#main > div.fxRateCal > table > tbody > tr:nth-child(2) > td.price.noLine").Text
動作確認
動作確認のため、取得した為替レートをMsgboxでポップアップさせます。
Sub OpenChrome() Dim Driver As New Selenium.WebDriver Driver.Start "Chrome" Driver.Get "https://info.finance.yahoo.co.jp/fx/convert/?a=1&s=CNY&t=JPY" MsgBox Driver.FindElementByCss("#main > div.fxRateCal > table > tbody > tr:nth-child(2) > td.price.noLine").Text Driver.Close Set Driver = Nothing End Sub
実行した結果です。
為替レートがメッセージボックスで表示されました。