【初心者向け】ExcelとVBAでWebスクレイピング実戦!
元記事:https://www.octoparse.jp/blog/intro-to-web-scraping-with-excel-vba/
スクレイピングとは、WebページのHTMLコードから、必要な情報やデータを抽出することです。言い換えれば、自動的にWebページ上のデータを収集する技術です。
現在、スクレイピングの一般的なプログラミング言語は、Python、Ruby、JAVA、PHPなどができますが、開発環境構築と環境設定は初心者に対しては非常に難しいです。
したがって、この記事で紹介するVBAは以下のメリットがあります。
・開発環境構築不要
・取得したデータをExcelシートに直接保存できる
・直接にExcelシートでセルを設定できる
それでは、ExcelとVBAを使って、Webサイトから情報やデータをExcelシートに取り込むというExcelマクロを実際に作成してみましょう。
一、Excelでスクレイピングライブラリを導入
ExcelでのWebスクレイピングを配置する前に、Excelのマクロに対してライブラリを導入しなければなりません。
手順は以下になります。
1.Excelを開いて、「空白のブック」を選択します。
2.リボン欄の「開発」をクリックします。
3.左側の「Visual Basic」ボタンを選択します。
4.「挿入」をクリックして、「標準モジュール」を選択します。
5.下記のコードを入力してください。
Sub test()
End sub
結果は以下になっております。
6.「ツール」をクリックして、「参照設定」をクリックします。
「Microsoft HTML Object Library」と「Microsoft Internet Controls」のチェックを入れます。
モジュールとは、プログラムにおいて特定の機能を持ったひとまとまりの構成要素です。選択されたのモジュールは、ブラウザ連動とHTMLコードを読み込むという機能が持っています。
それで、Webクローラーの開発が必要なものは設定完了です。
二、Webサイトにアクセスする
早速ですが、ExcelのVBAを使って、IEブラウザ経由でWebサイトにアクセスします。
これには、ナビゲート属性を使用します。この属性では、URLを二重引用符で囲んで渡す必要があります。詳しくは下記のコードに参照してください。
Sub test()
Dim ie As New InternetExplorer
Dim doc As New HTMLDocument
Dim ecoll As Object
ie.Visible = True
ie.navigate"http://test-sites.octoparse.com/?page_id=192"
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
End sub
F5を押して、マクロを実行します。そこで次のようなWebページが表示されます。
三、VBAでスクレイピングしましょう
今回はボタンを押すたびに、Webサイト上データが自動的にエクセルに取り込まれるように開発しましょう。
まず、Webサイトから、要素(HTMLドキュメント)を検証し、データがどのように構成されているかを分析する必要があります。HTML基礎知識はこちらのリンクで参照ください。今回はテーブルのデータを抽出するように試してみましょう。
1. Ctrl + Shift + I を押して、テーブルの要素を指定すると、HTMLのソースコードに表示されます。
したがって、テーブルの要素は「table」と分かっています。
2. VBAで要素「table」を抽出します。ソースコードでは以下のようになります。
Sub test()
Dim ie As New InternetExplorer
Dim doc As New HTMLDocument
Dim ecoll As Object
ie.Visible = True
ie.navigate "http://test-sites.octoparse.com/?page_id=192"
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document
Set ecoll = doc.getElementsByTagName("table")
End Sub
Excelは、Excelシートの範囲属性を使って、またはExcelシートのセル属性を使って初期化することができます。VBAスクリプトの複雑さを軽減するために、収集データはワークブックに存在するシート1のExcelセル属性に初期化される。
3.実行ボタンを指定します。
マクロスクリプトの準備ができたら、サブルーチンをExcelボタンに渡して割り当て、VBAのモジュールを終了する。ボタンに適当な名前をつけておきます。この例では、ボタンは「データ抽出」として初期化されます。
手順は以下になります。
4.ボタンを押して、以下のような情報が出力します。
四、Octoparseでスクレイピングする方法
プログラミングが苦手、或いは英語のコードばかりなので苦手意識を持っている方は、スクレイピングツールのOctoparseはおすすめします。
Octoparseは「自動識別」機能があるので、ページのURLを入力するだけで、Webページ上各項目のデータ(テキストとリンクを含む)、「次のページ」ボタン、「もっと見る」ボタン、およびページのスクロールダウンを自動的に検出し、タスク(Webクローラー)を自動的に生成することができます。
早速ですが、Octoparseで自動化の魅力を体験してみましょう。
1.Octoparseを起動して、スクレイピングしたいWebページのURLを入力します。
「抽出開始」 ボタンをクリックして進みます。
2.Octoparseでページが読み込みされたら、自動的にページ上の内容を識別します。
自動識別とは、自動的にページ上の必要なデータを検出して識別するという役立つ機能です。ポイント&クリックをする必要はなく、Octoparseは自動的に処理します。
3.識別が完了すると、データプレビューで識別したデータを表示され、確認してから「ワークフローの生成」ボタンを押します。
4.これで簡単にWebクローラーが作成しました!
上の「実行」ボタンをクリックして、すぐデータを抽出できます。簡単ではないでしょうか。
五、まとめ
VBAでスクレイピングは簡単にはできますが、複雑な構造を持つWebサイト(JavaScript、AJAX技術を使っている動的サイトなど)では、VBAの機能はちょっと足りないかもしれません。
それだけでなく、スクレイピングしようと思ったら、プログラミング言語とIT知識を勉強する必要があります。完璧に学ぶ時間がなく、効率的にスクレイピングがしたい、プログラミングが苦手、或いは英語のコードばかりなので苦手意識を持っている方はスクレイピングツールはおすすめです。
関連記事
PHPで簡単なWebクローラーを作ってみた
PythonによるWebスクレイピングを解説
Python vs Octoparse!初心者向きのスクレイピング方法はどっち?
【完全初心者向け】求人情報を一括で自動的に取得する方法公開!
Discussion