【チュートリアル】エクセルVBAでWEBスクレイピングする方法

ども、武器商人(@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を参照する必要があります。

  1. ExcelのVBE(Visual Basic Editor)をく
  2. メニューバー→「ツール」→「参照設定」
  3. 以下の二つにチェックを入れる
  • Microsoft HTML Object Library
  • Microsoft Internet Controls

エクセルVBAでWEBスクレピングする流れ

  1. IEでウェブサイトを開く
  2. HTMLを解析する
  3. 解析した情報を保存する

となります。保存する部分に関しては、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のサイトが表示されます。

f:id:bukidarts:20191122222615p:plain

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

実行結果は以下のようになります。
f:id:bukidarts:20191122224209p:plain

今回は、MsgBoxでポップアップ表示させるプログラムにしましたが、Excelの強みを生かして、セルに保存するなどすればより実用的なプログラムになるでしょう。

より実用的なWEBスクレイピングをするには?

Excelを使って、簡単にIEから情報を取得できるサンプルをご紹介しました。より実用的なプログラムにするには、複雑なHTMLを解析する必要があります。

DOM(ドキュメントオブジェクトモデル)の理解が必須になってきます。DOMに関してはそれはそれで説明するにはかなり長文になりますので、次回以降に別記事で公開する予定です。

また、以下の書籍では、その点が詳しく説明されていますのでよかったら是非ごらん下さい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です