【初心者向け】ExcelとVBAでWebスクレイピング実戦！

![【初心者向け】ExcelとVBAで Webスクレイピング実戦！.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/1e333935-070b-9929-cd8d-b95a611f877f.png)

元記事：[https://www.octoparse.jp/blog/intro-to-web-scraping-with-excel-vba/](https://www.octoparse.jp/blog/intro-to-web-scraping-with-excel-vba/)

[スクレイピング](https://www.octoparse.jp/blog/web-scraping/)とは、WebページのHTMLコードから、**必要な情報やデータを抽出する**ことです。言い換えれば、自動的にWebページ上のデータを収集する技術です。

現在、[スクレイピング](https://www.octoparse.jp/blog/web-scraping/)の一般的なプログラミング言語は、[Python](https://www.octoparse.jp/blog/web-scraping-using-python/)、Ruby、JAVA、[PHP](https://www.octoparse.jp/blog/creating-a-simple-web-crawler-in-php/)などができますが、開発環境構築と環境設定は**初心者に対しては非常に難しい**です。

したがって、この記事で紹介するVBAは以下のメリットがあります。

・開発環境構築**不要**
・取得したデータをExcelシートに**直接保存**できる
・直接にExcelシートで**セルを設定**できる

それでは、ExcelとVBAを使って、Webサイトから情報やデータをExcelシートに取り込むというExcelマクロを実際に作成してみましょう。

 

#一、Excelでスクレイピングライブラリを導入
ExcelでのWebスクレイピングを配置する前に、Excelのマクロに対してライブラリを導入しなければなりません。
手順は以下になります。


**1.Excelを開いて、「空白のブック」を選択します。**
![1.Excelを開いて.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/286a5283-97cb-439e-a3e7-337be85db8d6.png)

**2.リボン欄の「開発」をクリックします。**
![2.開発ボタン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/1a8f929e-2d16-1a3a-521c-1d12a692680e.png)

**3.左側の「Visual Basic」ボタンを選択します。**
![3.Visual Basicボタン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/59296095-9957-5465-aa27-6fc6b05e0b7f.png)


**4.「挿入」をクリックして、「標準モジュール」を選択します。**
![4.標準モジュール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/dbb7e0b9-7a7b-670e-7f67-f063e3b62ae0.png)


**5.下記のコードを入力してください。**

```
Sub test()

End sub
```
 

結果は以下になっております。
![5.Visual Basic for Applications.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/95b140e5-cfc0-5174-1e7d-1ce80c04b2b2.png)


**6.「ツール」をクリックして、「参照設定」をクリックします。**
「Microsoft HTML Object Library」と「Microsoft Internet Controls」のチェックを入れます。
![6.VBAモジュール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/30924a5b-0721-3beb-6107-67e26fe09956.png)
![7.VBAモジュール_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/18c5e859-0e8b-8395-0b4f-b2643878878c.png)


モジュールとは、プログラムにおいて特定の機能を持ったひとまとまりの構成要素です。選択されたのモジュールは、ブラウザ連動と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ページが表示されます。
![8.IE_Web.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/eccb244f-7db3-43d5-379f-f42e1be11e47.png)


#三、VBAでスクレイピングしましょう
今回はボタンを押すたびに、Webサイト上データが自動的にエクセルに取り込まれるように開発しましょう。
まず、Webサイトから、要素（HTMLドキュメント）を検証し、データがどのように構成されているかを分析する必要があります。HTML基礎知識は[こちらのリンク](https://developer.mozilla.org/ja/docs/Learn/Getting_started_with_the_web/HTML_basics)で参照ください。今回はテーブルのデータを抽出するように試してみましょう。

 

**1. Ctrl + Shift + I を押して、テーブルの要素を指定すると、HTMLのソースコードに表示されます。**
したがって、テーブルの要素は「table」と分かっています。
![9.HTMLコード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/5c464fda-5f53-d1b9-04e3-2659f5b7a8bd.png)
 
**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のモジュールを終了する。ボタンに適当な名前をつけておきます。この例では、ボタンは「データ抽出」として初期化されます。

手順は以下になります。
![10.ボタン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/1981b8f2-edbd-404b-4d39-9f5300fef13e.png)
![11.マクロの登録.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/029ae449-c28e-5dbe-9a87-9e9c2f5bb93c.png)
 

**4.ボタンを押して、以下のような情報が出力します。**
![12.VBA出力結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/1449f418-5d26-7f6c-1a0d-f298037610f3.png)



 


#四、Octoparseでスクレイピングする方法
プログラミングが苦手、或いは英語のコードばかりなので苦手意識を持っている方は、スクレイピングツールの[Octoparse](https://www.octoparse.jp/)はおすすめします。

Octoparseは「[自動識別](https://helpcenter.octoparse.jp/hc/ja/articles/360013561999-Octoparse%E3%82%92%E3%82%82%E3%81%A3%E3%81%A8%E7%9F%A5%E3%82%8B-)」機能があるので、ページのURLを入力するだけで、Webページ上各項目のデータ（テキストとリンクを含む）、「次のページ」ボタン、「もっと見る」ボタン、およびページのスクロールダウンを自動的に検出し、タスク（Webクローラー）を自動的に生成することができます。

早速ですが、Octoparseで自動化の魅力を体験してみましょう。

 

**1.Octoparseを起動して、スクレイピングしたいWebページのURLを入力します。**
「抽出開始」 ボタンをクリックして進みます。
![13.Octoparse.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/7b186e89-d4a3-ea55-b9db-37658bf354d4.png)

 

**2.Octoparseでページが読み込みされたら、自動的にページ上の内容を識別します。**
自動識別とは、自動的にページ上の必要なデータを検出して識別するという役立つ機能です。ポイント&クリックをする必要はなく、Octoparseは自動的に処理します。
![14.Octoparse_自動識別.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/47f83196-2c49-7532-95c9-ca73e57e2289.png)


**3.識別が完了すると、データプレビューで識別したデータを表示され、確認してから「ワークフローの生成」ボタンを押します。**
![15.Octoparse_自動識別結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/ece59f4e-5462-27c5-f46c-8b5285fd47ab.png)


**4.これで簡単にWebクローラーが作成しました！**
上の「実行」ボタンをクリックして、すぐデータを抽出できます。簡単ではないでしょうか。
![16.Octoparse_抽出結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/bb551f14-625c-5b60-c417-4fa076d43745.png)


 

#五、まとめ
VBAでスクレイピングは簡単にはできますが、[複雑な構造](https://www.octoparse.jp/blog/5-anti-scraping-techniques-you-may-encounter/)を持つWebサイト（JavaScript、AJAX技術を使っている動的サイトなど）では、VBAの機能はちょっと足りないかもしれません。
それだけでなく、スクレイピングしようと思ったら、プログラミング言語とIT知識を勉強する必要があります。完璧に学ぶ時間がなく、効率的にスクレイピングがしたい、プログラミングが苦手、或いは英語のコードばかりなので苦手意識を持っている方は[スクレイピングツール](https://www.octoparse.jp/blog/the-10-best-web-scraping-tools/)はおすすめです。

[![Octoparse_無料トライアル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/a4905bee-168f-726d-06eb-660c5b917e48.png)](https://www.octoparse.jp?utm_source=qiita&utm_medium=pic&utm_campaign=8872)


##関連記事
[PHPで簡単なWebクローラーを作ってみた](https://www.octoparse.jp/blog/creating-a-simple-web-crawler-in-php/)
[PythonによるWebスクレイピングを解説](https://www.octoparse.jp/blog/web-scraping-using-python/)
[Python vs Octoparse！初心者向きのスクレイピング方法はどっち？](https://www.octoparse.jp/blog/web-scraping-using-python-vs-web-scraping-tool/)
[【完全初心者向け】求人情報を一括で自動的に取得する方法公開！](https://www.octoparse.jp/blog/a-complete-guide-to-web-scraping-job-postings/)