はじめに
前回の記事でExcelのVBAマクロからIE(インターネットエクスプローラー)を操作し、所定のサイトを表示させるところまでご説明いたしました。
今回は、表示したウエブページから内容を取得する方法をご説明いたします。
この処理はいわゆるスクレイピングという処理で、ネット上の情報を集めようとする企業、個人ともに多くのプログラムを作成し、自動化して情報を取得しています。
自動化、生産性向上をめざしてスクレイピングの世界の入り口を覗いてみましょう。
Excel VBAでWebページの内容を取得する本記事の目的
本記事では前回の記事をベースに表示させたウエブページのHTML形式のデータをプログラムから一度読み込んで、その後HTMLを解析してタグの中で取得したい部分を抜き出して表示する、という方法をご紹介します。
取得したHTMLを読み込んで解析するのは、HTMLはウェブブラウザが内容を読み込むための記法で、人間がそれを見ても分かりづらい(というか煩わしい)ものだからです。なので、一度HTMLを読み込んでその中の「タグ」と呼ばれる要素に囲まれた部分を人間に見やすい形に整形して表示する方法を考えます。
Excel VBAでWebページの内容を取得する処理の流れ
処理の流れとしては、
IE(インターネットエクスプローラー)オブジェクトを作成し、表示する
↓
navigateメソッドを使い希望のサイトへ遷移する
↓
サイトが表示されるまで読み込みを待つ ←前回ココまで!
↓
表示されたサイトのHTMLを取得する
↓
取得したHTMLを解析し、表示したい部分をMsgBoxに表示させる
という流れになります。
Excel VBAでWebページの内容を取得する関数・プロパティなど
取得したHTMLを格納するオブジェクトを作成するクラスです。
いまいち意味がわからない方は、「ウエブからとってきたHTMLを一旦入れておく箱のようなもの」というイメージを持っているといいと思います。
getElementsByClassName
取得したHTMLオブジェクトからクラス名で指定して要素を取得します。
これもHTMLやCSSにある程度詳しくないとよくわからないと思います。
次回以降、説明する機会を作りたいと思いますので、現時点では「ウエブの内容から取ってきたい場所を指定しているところ」程度にざっくりご理解いただいておけばよいかと思います。
Excel VBAでWebブラウザを操作する方法のサンプルコード
ということでサンプルコードです!
弊ブログを表示し、サイトタイトルを取得してMsgBoxに表示させています。
Sub testIE() Dim objIE As InternetExplorer Set objIE = CreateObject("Internetexplorer.Application") objIE.Visible = True objIE.navigate "https://jidouka-labo.com/" Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE DoEvents Loop '↓今回追加された分はココから!↓ Dim htmlDoc As HTMLDocument Set htmlDoc = objIE.document MsgBox htmlDoc.getElementsByClassName("site-title")(0).innerHTML End Sub
実行結果
終わりに
本記事では特定のサイトを表示させるところまでをご説明した前回に続いて、ウエブページからHTMLを取得しオブジェクトに格納したあとHTML構文を解析し、クラス指定して所定の要素を抜き出す処理をご説明しました。
とりあえずこれでスクレイピングの超簡単な部分を実装することができたことになります。
自動化への大いなる一歩目を踏み出せたのではないでしょうか??
しかし、まだまだ生産性を向上させるほどの有益な自動化には程遠いと言わざるを得ません。
今回の応用を土台に、VBAマクロからIEを操ってネット上の情報を取得し、日々の不毛なサイトチェック業務をVBAで自動化して生産性向上を目指しましょう。