Excel VBAとIEでウェブページの情報を取得する(スクレイピング)

MS社から出ているウェブブラウザはEdgeが推奨されており、IEはもうオワコンになろうとしています。IEに対応していないサイトすらもあります。

ただ、Excel VBAを使ってスクレイピングするにはIEを使わざるを得ないのが現状なので、使い方を覚えておきましょう。IEが完全にサポート終了したら次はこれがEdgeに置き換わるだけでしょうし。

参考にしたのは[VBA]30分あればできるVBAスクレイピングです。

スポンサーリンク

プログラムの内容

参考サイトはヨドバシの会員ページを例にとっていたので、ちょうどいいやと思い僕もヨドバシを例につくってみます。

会員情報が入ってしまっていたのでメールアドレスが入った状態になっていましたが、ここに任意のメールアドレスを入力するところもやります。メールアドレスはauthenticateDO.authKeyと命名されたフォームでした。

パスワード(こっちはauthenticateDO.passwordというフォーム)も入れて、メンバーズページへログインします。このログインボタンはクリックするとJavaScriptによるプログラムlogin(this)が走ります。

ログイン後の画面です。スクショの右下あたりに「ようこそ!○○○○様」と会員の名前が表示されますので、ここを拾いにいきます。ここはmemberNameというクラス名でした。

注意すべきは、ログインボタンを押してマイページに遷移するのに結構時間を要すること。ページの読み込みが終わってから取得しないといけません。VBAでIEを操作してJavaScriptで動作するWebページをスクレイピングを参考にし、読み込み時間を数秒確保しました。

結果としてExcel側に表示することができましたとさ。

プログラミング

VBA

Sub scrapingIE()
    Dim objIE As InternetExplorer   'IEオブジェクトを準備'
    Set objIE = CreateObject("Internetexplorer.Application")
    objIE.Visible = True    'IEを表示'
    objIE.navigate "https://secure.goldpoint.co.jp/gpm/authentication/index.html"   'URLを指定'
    Call WaitResponse(objIE)    '読み込み待機
    Dim setId As String
    Dim setPassword As String
    setId = "ログインID"
    setPassword = "ログイン用パスワード"
    'IDとパスワードをセットしてログイン
    objIE.document.forms("form").Item("authenticateDO.authKey").Value = setId
    objIE.document.forms("form").Item("authenticateDO.password").Value = setPassword
    objIE.navigate "JavaScript:login(this)"
    Application.Wait Now + TimeValue("0:00:05")     'HTMLの読み込み待ち
    Dim htmlDoc As HTMLDocument     'HTMLドキュメントオブジェクトを準備
    Set htmlDoc = objIE.document
    MsgBox htmlDoc.getElementsByClassName("memberName")(0).innerHTML
End Sub
Sub WaitResponse(objIE As Object)
    Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち
        DoEvents
    Loop
End Sub

コメント

コメントする前にお読みください

迷惑コメント防止のために初回のコメント投稿は承認制のため、投稿が反映されるまで少し時間がかかります。もちろん荒らしは承認しません。

教えて君やクレクレ君に対しては回答しませんのでご了承ください。