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

コメント

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

プログラミングに関する質問について、詳細なコードはお答えしませんのでご了承ください。
また、迷惑コメント防止のために初回のコメント投稿は承認制です。投稿が反映されるまで少し時間がかかります。