
Webページから情報収集をする場合に、各ページからコピー・ペーストをするのは効率が悪いです。そこでおすすめの方法は、VBAによるスクレイピングです。プログラムによってデータの自動収集が可能で、作業効率が大幅に向上します。ExcelのVBAを活用することで、開発環境の構築が不要といったメリットもあります。
今回は、VBAによるスクレイピングの方法を解説します。
目次
スクレイピングとは
スクレイピングとは、Webページに掲載された情報をプログラムで自動的に抽出する技術を指します。また、プログラムによって情報収集できるため、データの分析・活用をしやすい特徴があります。スクレイピングは、Webページから何度も情報収集するようなルーティンワークの自動化に向いている技術です。
スクレイピングをVBAで行うメリット
Excel機能のVBAを利用したスクレイピングのメリットは以下の2点です。
・開発環境が不要
・取得したデータをそのままExcelで分析、活用できる
スクレイピングは、VBA以外にもPHP・JAVA・Pythonなど様々な言語で実現できます。しかし、開発環境が必要なため、VBAよりも実現のハードルが高くなります。
VBAでスクレイピングを行う事前準備
ここからは、VBAでスクレイピングするための事前準備について解説します。
必要なもの
VBAでスクレイピングするために必要なものは以下の2点です。
- Excel
- Internet Explorer
VBAは、Excelに搭載された機能です。今回、紹介する方法はInternet Explorerを利用してWebページの情報を収集します。
開発タブを表示
Excelのマクロ・VBAをはじめて利用される方は、Excelのツールバーに「開発」タブを表示させる必要があります。
「開発」タブの表示方法は以下の流れです。
- Excelを開きツールバー「ファイル」をクリック
- 「オプション」を選択
- 「リボンのユーザー設定」より「開発」にチェックを入れて保存
最後に、ツールバーに開発タブが表示されているか確認しましょう。
ライブラリの導入
Excelの標準ライブラリではスクレイピングを実装できません。そのため、ライブラリを追加導入する必要があります。ライブラリの導入方法は以下のとおりです。
- Excelを開いて、ツールバーの「開発」をクリック
- 左の「Visual Basic」ボタンをクリック
- 起動したVBEのツールバー「ツール」より「参照設定」をクリック
- 参照可能なライブラリファイルの一覧より以下の2項目をチェック
・Microsoft HTML Object Library
・Microsoft Internet Controls - 「OK」ボタンで完了
これにてVBAのスクレイピングの下準備が完了しました。
【実践】VBAでのスクレイピング
VBAのスクレイピングのサンプルコード
VBAのスクレイピングのサンプルコードを紹介します。
本日ご紹介するのは、指定したURLのtitle・h1・h2・h3タグの内容を収集するコードです。「スクレイピングをするURL」を変更してご利用ください。
Sub test() Dim htmlie As New InternetExplorer Dim htmlDoc As New HTMLDocument Dim sheet_name As String Dim str_url As String str_url = "https://www.××××.com/" 'スクレイピングをするURL sheet_name = "sheet1" '書き込むシート名 htmlie.Visible = True 'ページを表示するか否か True Or False htmlie.navigate str_url Do DoEvents Loop Until htmlie.readyState = READYSTATE_COMPLETE Set htmlDoc = htmlie.document Dim i As Integer i = 1 Worksheets(sheet_name).Cells(i, 1).Value = "URL:" + str_url i = i + 1 Worksheets(sheet_name).Cells(i, 1).Value = "title" i = i + 1 For Each Value In htmlDoc.getElementsByTagName("title") Worksheets(sheet_name).Cells(i, 1).Value = Value.innerText i = i + 1 Next Value Worksheets(sheet_name).Cells(i, 1).Value = "h1" i = i + 1 For Each Value In htmlDoc.getElementsByTagName("h1") Worksheets(sheet_name).Cells(i, 1).Value = Value.innerText i = i + 1 Next Value Worksheets(sheet_name).Cells(i, 1).Value = "h2" i = i + 1 For Each Value In htmlDoc.getElementsByTagName("h2") Worksheets(sheet_name).Cells(i, 1).Value = Value.innerText i = i + 1 Next Value Worksheets(sheet_name).Cells(i, 1).Value = "h3" i = i + 1 For Each Value In htmlDoc.getElementsByTagName("h3") Worksheets(sheet_name).Cells(i, 1).Value = Value.innerText i = i + 1 Next Value End Sub
サンプルコードを実行すると、指定したシートのセルに収集した情報が自動的に入力されます。このように、VBAのスクレイピングは、欲しい情報をセルに書き込むことができ、データとして取り扱いやすいのも特徴です。
サンプルコード利用方法
VBAのサンプルコードの利用方法を解説します。
まず、Excelの新規「空白のブック」を作成します。ツールバー「開発」を押し「Visual Basic」を選択してください。するとVBAのコードエディタのVBEが起動します。
そのVBEのツールバー「挿入」より「標準モジュール」をクリックしてください。空白のモジュールが画面に表示されますので、サンプルコードをコピー・ペーストします。
サンプルコード7行目の「str_url = “https://www.××××.com/” ‘スクレイピングをするURL」を情報収集したいURLに変更してください。
(今回は弊社ブログ、IT弁護士に聞く「企業としてのWebスクレイピングは違法なのか?」で実行していきます。)
最後に、ツールバーにある「実行」を選択し、「Sub/ユーザーフォームの実行」をクリックします。指定したURLがInternet Explorerで表示され、Excelシートには収集した情報が入力されます。
今回のサンプルコードは指定したタグの内容を収集しましたが、他にもクラスやidを指定することも可能です。クラスで指定する場合は「getElementsByClassName」、idで指定する場合は「getElementById」を利用します。
まとめ
VBAを利用したスクレイピングは、Webページからの情報収集を自動化できます。VBAでスクレイピングするメリットは、「Excel」「Internet Explorer」を用意するだけで実現可能なことです。他のPHP・JAVA・Pythonなどの言語でもスクレイピングは可能ですが、開発環境・専門的知識を必要とするためVBAに比べるとハードルが高くなります。
また、VBAのスクレイピングで取得したデータは、そのままExcelシートのセルに入力できるのもメリットです。それによって、情報収集した数値のグラフ化・データの分析なども手軽にできます。簡単にスクレイピングを試したい方はVBAを利用してみましょう。
ただし、スクレイピングをするには法律面など、いくつか注意しなければならないこともあるので、それを確認してから実行することをおすすめします。
また、VBAで実行してみたけど思ったとおりにスクレイピングができない、もっと高度なスクレイピングを実行したい場合にはスクレイピング専門の企業に相談してもよいでしょう。スクレイピング専門企業にもそれぞれ特徴があるので、比較し課題を解決できる企業を選ぶようにしましょう。