
Webページから情報収集をする場合に、各ページからコピー・ペーストをするのは効率が悪いです。そこでおすすめの方法は、VBAによるスクレイピングです。プログラムによってデータの自動収集が可能で、作業効率が大幅に向上します。ExcelのVBAを活用することで、開発環境の構築が不要といったメリットもあります。
今回は、VBAによるスクレイピングの方法を解説します。
目次
スクレイピングとは
スクレイピングとは、Webページに掲載された情報をプログラムで自動的に抽出する技術を指します。また、プログラムによって情報収集できるため、データの分析・活用をしやすい特徴があります。スクレイピングは、Webページから何度も情報収集するようなルーティンワークの自動化に向いている技術です。
スクレイピングをVBAで行うメリット
Excel機能のVBAを利用したスクレイピングのメリットは以下の2点です。
開発環境が不要
VBAはExcelに標準搭載されているため、新しく環境を用意する必要がありません。普段Excelを使っている人であれば、慣れた動作の環境でスクレイピングを実装できます。
取得したデータをそのままExcelで分析・活用できる
VBAでスクレイピングをし、取得したデータはExcelに直接保存することができます。そのため、データをインポートする手間が省け、データ収集後にすぐ分析等の活用をすることができます。また、データ処理や分析もそのままVBAによって自動化することが可能です。
スクレイピングは、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のスクレイピングのサンプルコードを紹介します。 本日ご紹介するのは、指定したURLのtitle・h1・h2・h3タグの内容を収集するコードです。「スクレイピングをするURL」を変更してご利用ください。 サンプルコードを実行すると、指定したシートのセルに収集した情報が自動的に入力されます。このように、VBAのスクレイピングは、欲しい情報をセルに書き込むことができ、データとして取り扱いやすいのも特徴です。 VBAのサンプルコードの利用方法を解説します。 まず、Excelの新規「空白のブック」を作成します。ツールバー「開発」を押し「Visual Basic」を選択してください。するとVBAのコードエディタのVBEが起動します。 そのVBEのツールバー「挿入」より「標準モジュール」をクリックしてください。空白のモジュールが画面に表示されますので、サンプルコードをコピー・ペーストします。 サンプルコード7行目の「str_url = “https://www.××××.com/” ‘スクレイピングをするURL」を情報収集したいURLに変更してください。 最後に、ツールバーにある「実行」を選択し、「Sub/ユーザーフォームの実行」をクリックします。指定したURLがInternet Explorerで表示され、Excelシートには収集した情報が入力されます。 今回のサンプルコードは指定したタグの内容を収集しましたが、他にもクラスやidを指定することも可能です。クラスで指定する場合は「getElementsByClassName」、idで指定する場合は「getElementById」を利用します。 VBAは簡単にスクレイピングができる手段のひとつです。しかし、同じMicrosoftが提供するInternet Explorerは2022年6月16日(日本時間)をもってサポートが終了しているため、別の方法でのスクレイピングを考える人もいるでしょう。スクレイピングは前述しているように、様々な言語・ツール・サービスでの実装が可能です。ぜひ参考にしてみてください。 一番汎用性の高いスクレイピングを行えるのがPythonによるスクレイピングです。スクレイピングに活用できるライブラリが多く存在するため、Pythonを少し勉強している人であれば実装が可能でしょう。 VBAと同様に手軽にスクレイピングを行いたい人にはスクレイピングツールの活用がおススメです。 スクレイピングをツールではなく、業務委託して目的に合った形式でデータを提供するサービスも存在します。 VBAを利用したスクレイピングは、Webページからの情報収集を自動化できます。VBAでスクレイピングするメリットは、「Excel」「Internet Explorer」を用意するだけで実現可能なことです。他のPHP・JAVA・Pythonなどの言語でもスクレイピングは可能ですが、開発環境・専門的知識を必要とするためVBAに比べるとハードルが高くなります。 また、VBAのスクレイピングで取得したデータは、そのままExcelシートのセルに入力できるのもメリットです。それによって、情報収集した数値のグラフ化・データの分析なども手軽にできます。簡単にスクレイピングを試したい方はVBAを利用してみましょう。 ただし、スクレイピングをするには法律面など、いくつか注意しなければならないこともあるので、それを確認してから実行することをおすすめします。 また、VBAで実行してみたけど思ったとおりにスクレイピングができない、もっと高度なスクレイピングを実行したい場合にはスクレイピング専門の企業に相談してもよいでしょう。スクレイピング専門企業にもそれぞれ特徴があるので、比較し課題を解決できる企業を選ぶようにしましょう。
【実践】VBAでのスクレイピング
VBAのスクレイピングのサンプルコード
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
サンプルコード利用方法
(今回は弊社ブログ、IT弁護士に聞く「企業としてのWebスクレイピングは違法なのか?」で実行していきます。)VBA以外のスクレイピング方法
Pythonによるスクレイピング
おススメのスクレイピングツール
スクレイピングツールはノーコードで実装でき、無料で提供されているものも多くあります。しかし、Pythonで実装するほど自由度が高くないところや、海外の製品が多いため、理解やサポートが難しいという点もあります。おススメのスクレイピングサービス
もちろん、スクレイピングツールよりも費用が高くなってしまうことが多いですが、その分納得のいくサービスを受けられ、要望に合わせてスクレイピング以上のこともできるのがメリットです。まとめ
スクレイピングの内製化を行う前に読むべき必須資料
ダウンロード