【VBA】Webスクレイピング-01:タイトルの取得

VBAで実践するWeb操作 VBA

VBAというとローカル・オフライン環境で動作するものが大半を占めますが、実はWeb操作をすることも可能です。

WebスクレイピングというとPythonなどのライブラリが豊富な言語もありますが、サラリーマンが会社で使いたいというシーンにおいては実行環境が整えられないという課題もあります。

そうしたなか、Excelは多くの企業でインストールされているアプリケーションのため、環境の用意がほぼ不要であるという点で有利です。しかも、VBAは工夫次第で様々なWebページ操作が実現できます。

タナイ
タナイ

今回は、「VBAで実践するWeb操作」入門編の第1弾です。

VBAで実践するWeb操作:環境構築とタイトルの取得

このシリーズではExcel VBAで、Webページの操作を行っていきます。
今回は基礎編として、Webページにアクセスするための環境構築を行い、タイトルを取得するというシンプルなプログラムを作成してみましょう。

VBAでWebスクレイピングするための事前設定

VBAによるWebスクレイピングを行うプログラムでは、『ライブラリ』を使用する必要があります。
VBAエディタの[ツール]-「参照設定」を開き、以下の2つのライブラリにチェックを付けてください。

今回は、このうち1つのライブラリの参照のみで足りるプログラムを紹介していますが、次回以降は2つとも必要になるケースが多いので、先に参照設定をしておきましょう。

  • Microsoft Internet Controls
  • Microsoft HTML Object Library
動作は遅くなってしまいますが、「遅延バインディング」を使用すると参照設定をせずにライブラリを使用することも可能です。ただし、その場合はライブラリに含まれるステートメントに対してはエディタの入力補完は効かなくなります。

まず動かしてみよう

チェックを付けたら、標準モジュールを挿入し、以下のコードを書いてください(指定したURLからタイトルを取得するユーザー定義関数を作成しています)。

Option Explicit

Function getTitle(url As String)

'■1.前処理
'IEのオブジェクトを作成
Dim ie As InternetExplorer
Set ie = New InternetExplorer

'IEが開かないように設定
ie.Visible = False


'■2.本処理
'指定のURLを開く
ie.Navigate (url)

'ページの読み込みが完了するまで待つ
Do While ie.readyState <> READYSTATE_COMPLETE
    'OSに制御を戻す
    DoEvents
Loop

'<title>タグの内容を取得する
Dim title As String
title = ie.Document.getElementsByTagName("title")(0).innerText


'■3.後処理
ie.Quit
Set ie = Nothing

getTitle = title

End Function

以降は、「getTitle(取得したいWebページのURL)」という関数名で呼び出せるようになります。

ユーザー定義関数はインテリセンスも効きます
引数に直接指定する場合はダブルクォーテーション(“”)で囲ってください
別のセルを参照する場合はダブルクォーテーションで囲わなくてもOKです

コードの解説

大きく分けて、以下の3ステップで処理を行います。

  1. 前処理:本処理のための事前準備
  2. 本処理:実際にやりたい処理
  3. 後処理:終了後の片づけ

この中の「前処理」「後処理」は、Webページの操作を行うVBAであれば毎回ほぼ同じ内容になりますので、覚えてしまうと良いでしょう。
では、各ステップを見ていきましょう。

1.前処理

Webページにアクセスするための「IE」のオブジェクトを作成しています。


ie.Visible = False

上記を設定した場合、IEは画面には表示されず、バックグラウンドで動く状態になります。

タナイ
タナイ

Trueにすると、この関数を呼び出すたびにIEが開くので画面が見づらくなります。

2.本処理

Webページを開き、「title」タグの中身を取得します。
ここでポイントになるのは、真ん中にある「ページの読み込みが完了するまで待つ」ところです。

「readyState」というプロパティが「READYSTATE_COMPLETE」になるまで、IEは「ページの読み込み中」の状態です。
「ページの読み込み中」の状態では、titleタグが読み込まれておらず、取得できない可能性がありますので、読み込み完了を待ってからtitleタグを取得しています。

ページの読み込み完了時、readyStateプロパティがREADYSTATE_COMPLETEとなる

3.後処理

前処理で開いたIEを閉じます。
この処理を行わないと、バックグラウンドでたくさんのIEが起動したままになり、パソコンの動作が不安定になってしまいますので、忘れないように注意しましょう。

タナイ
タナイ

IEに限らず、外部オブジェクトはちゃんと終了処理をすることが重要です

Webページ操作の応用例

今回のサンプルを応用すると、他にもこんなことができるようになります。

  • HTMLソースの取得
  • Webページにある画像の一括ダウンロード
  • ECサイトの価格チェック

今後も解説記事を投稿していきますが、腕前に自信のある方はぜひ今回の記事をもとに自力で挑戦してみてください!

VBA独学にオススメの書籍

在宅勤務で通勤時間が浮いたならVBAの学習に充ててスキルアップを目指しませんか。

ただのサラリーマンだった管理人がVBA副業で月30万以上稼げるようになったキッカケの書籍です

コメント

タイトルとURLをコピーしました