自動化・スクレイピングの第一歩!Excel VBAでWebページの内容を取得する方法【サンプル有り】

はじめに

前回の記事でExcelのVBAマクロからIE(インターネットエクスプローラー)を操作し、所定のサイトを表示させるところまでご説明いたしました。

今回は、表示したウエブページから内容を取得する方法をご説明いたします。

この処理はいわゆるスクレイピングという処理で、ネット上の情報を集めようとする企業、個人ともに多くのプログラムを作成し、自動化して情報を取得しています。

自動化、生産性向上をめざしてスクレイピングの世界の入り口を覗いてみましょう。

Excel VBAでWebページの内容を取得する本記事の目的

本記事では前回の記事をベースに表示させたウエブページのHTML形式のデータをプログラムから一度読み込んで、その後HTMLを解析してタグの中で取得したい部分を抜き出して表示する、という方法をご紹介します。

取得したHTMLを読み込んで解析するのは、HTMLはウェブブラウザが内容を読み込むための記法で、人間がそれを見ても分かりづらい(というか煩わしい)ものだからです。なので、一度HTMLを読み込んでその中の「タグ」と呼ばれる要素に囲まれた部分を人間に見やすい形に整形して表示する方法を考えます。

Excel VBAでWebページの内容を取得する処理の流れ

処理の流れとしては、

IE(インターネットエクスプローラー)オブジェクトを作成し、表示する

navigateメソッドを使い希望のサイトへ遷移する

サイトが表示されるまで読み込みを待つ ←前回ココまで!

表示されたサイトのHTMLを取得する

取得したHTMLを解析し、表示したい部分をMsgBoxに表示させる

という流れになります。

Excel VBAでWebページの内容を取得する関数・プロパティなど

HtmlDocument クラス

取得した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で自動化して生産性向上を目指しましょう。