ども、武器商人(@bukilog)です。
エクセルVBAでWEBスクレピングするノウハウをメモします。
目次
エクセルVBAのスクレイピングに参考にした書籍
WEBスクレイピングとは?
ウェブスクレイピング(英: Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラー[1]あるいはウェブ・スパイダー[2]とも呼ばれる。 通常このようなソフトウェアプログラムは低レベルのHTTPを実装することで、もしくはウェブブラウザを埋め込むことによって、WWWのコンテンツを取得する。
ウェブスクレイピング – Wikipedia
簡単に言うと、自動でWEB上のデータを取ってくる技術です。
エクセルVBAでWEBスクレイピングするメリット
まとめ
・取得したデータをシートに簡単保存
環境構築やインストール不要
例えば、スクレイピングするのに一般的な言語は、PythonだったりRubyだったり、JavaScript(Node.js)だったりします。そもそもこれらの言語を動かすには、環境構築やライブラリのインストールが必要です。
Python、Ruby、JavaScriptの書籍には環境構築やライブラリのインストール方法が書いてあることが多いのですが、ライブラリが最新でなかったりすると、書籍に記載されていないエラーなどが出て不便です。
取得したデータをシートに簡単に保存できる
WEBスクレイピングは大量のデータを取得し保存することに意義があります。したがって、取得したデータはcsvやDBに格納することが多いです。エクセルであれば、そのままそのブックのシートに保存してしまえば良いので便利です。
エクセルVBAでWEBスクレピングをする準備
必要なソフト
MicroSoft Excelのみ!(バージョンは古くても問題なし)
必要なライブラリ
ExcelVBAからIEを制御するには、IEのCOMを参照する必要があります。
- ExcelのVBE(Visual Basic Editor)をく
- メニューバー→「ツール」→「参照設定」
- 以下の二つにチェックを入れる
- Microsoft HTML Object Library
- Microsoft Internet Controls
エクセルVBAでWEBスクレピングする流れ
- IEでウェブサイトを開く
- HTMLを解析する
- 解析した情報を保存する
となります。保存する部分に関しては、WEBスクレイピングというよりはVBAの基本的な話が中心になるので省略します。
エクセルVBAでWEBスクレピングのサンプルコード
Yahoo!JAPANのサイトにアクセスする
Sub OpenWebSite() 'IEのCOMをインスタンス化 Dim ie As New InternetExplorer 'IEでYahoo!JAPANのポータルサイトを開く ie.navigate "https://www.yahoo.co.jp" 'IEを表示 ie.Visible = True End Sub
実行すると以下のようにYahoo!JAPANのサイトが表示されます。
HTMLを解析するサンプルコード
Yahoo!JAPANのタイトルを取得します。
例としては簡単ですが、ブログのURL一覧を渡し、タイトルを一網打尽にしたい場合に使えますね。特にSEOなんてやってあると、タイトルや見出しタグから分析できることが多いので、例としては良いかなと思います。
先ほどのサンプルコードに肉付けします。
Option Explicit 'WinAPIのSleepを定義 Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub OpenWebSite() 'IEのCOMをインスタンス化 Dim ie As New InternetExplorer 'IEでYahoo!JAPANのポータルサイトを開く ie.navigate "https://www.yahoo.co.jp" 'サイトを開ききるまでウェイトする処理 Do If (ie.Busy = False) Then Exit Do End If '1000msウェイト Sleep 1000 Loop 'HTMLドキュメント格納用の変数を用意 Dim html As HTMLDocument 'ieに取得したTMLドキュメントをセット Set html = ie.document 'HTMLのタイトルを表示 MsgBox html.Title End Sub
実行結果は以下のようになります。
今回は、MsgBoxでポップアップ表示させるプログラムにしましたが、Excelの強みを生かして、セルに保存するなどすればより実用的なプログラムになるでしょう。
より実用的なWEBスクレイピングをするには?
Excelを使って、簡単にIEから情報を取得できるサンプルをご紹介しました。より実用的なプログラムにするには、複雑なHTMLを解析する必要があります。
DOM(ドキュメントオブジェクトモデル)の理解が必須になってきます。DOMに関してはそれはそれで説明するにはかなり長文になりますので、次回以降に別記事で公開する予定です。
また、以下の書籍では、その点が詳しく説明されていますのでよかったら是非ごらん下さい。