アメグラ2号のブログ

1980年代後半の古き良きビデオゲームのほか、オッサンの個人的備忘録

VBA WEBスクレイピング

ExcelVBA
ExcelVBA

WEBスクレイピング、そーいえばExcelVBAでやっていたのでもう一度整理しておく。

こうやって見ると、IEオブジェクトの「GetObject」がキモで、あとは流れの処理だけ。ただ、objIE.document.getElementsByTagNameの個所は、取得したテキストをどんなメソッドで呼び出すのか…これはあらかじめ確認しておく必要あり。一応、最下部に抜粋は置いておく。

◆WEBスクレイピングのコード(VBA)

Sub IEoutput3()
'======================================
'機能:WEBスクレイピング
'概要:指定URLへアクセス、指定タグ内のテキストを抽出
'======================================
   '======================================
    'アクセス先URL
    TargetURL = "http://www.pachinkovillage.com/introduction/index.php?action=archive"
   '======================================
    'スクリーン処理の負荷低減のために
    Application.ScreenUpdating = False
   '======================================
    '変数宣言:IEオブジェクト
    Dim objIE As Object

    'IEオブジェクト作成
    'GetObject([ pathname ], [ class ])で、pathnameは省略可能
    Set objIE = GetObject("", "InternetExplorer.Application")

    'ウィンドウズ上で見えるように(裏で動くのではなくて)
    objIE.Visible = True

    'IEで指定URLにアクセスする
    objIE.Navigate TargetURL
   '======================================
    ' ページの表示完了待ち
    While objIE.readyState <> 4 Or objIE.Busy = True
        DoEvents
    Wend
   '======================================
    On Error Resume Next      '値がないとエラーが出るので、エラー回避用
   '======================================
    '要素の数の確認
    j = objIE.document.all.Length
    Debug.Print j
    
    '変数:HTMLドキュメント取得のためのオブジェクト
    Dim A As Object
    
    'HTML内の「全てのタグ=*」のドキュメントを取得する
    'それらを1つずつ「A」として、処理をしていく。
    '「A」はオブジェクトなので、「.」をつけて各メソッドで情報を引き出す
    'メソッドについて:objIE.document.getElementsByTagName詳細参照だな…。
    For Each A In objIE.document.getElementsByTagName("*")
      
        '条件:絞り込み----------------------------
        If A.tagName = "A" Or A.className = "dounyuubi" Then
 
            '情報出力:
            Debug.Print A.uniqueID, A.innerText

        End If
    Next
    
'===================================
'備考:オブジェクトのメソッド(抜粋)
'A.uniqueID 'uniqueID
'A.tagName '親のTAG
'A.Type       'タイプ ※selectボックスは”select-one”と取得
'A.Name     '名前
'A.ID          'ID
'A.className  'クラス名
'A.tabIndex    'フォーカス順序 (Tabでの移動順)
'A.Value         '値
'A.Checked     'チェック状態 (True = チェック有り、false = チェック無し)
'A.parentElement.tagName  '親のTAG
'A.innerText
'A.outerText
'A.outerHTML
'A.innerHTML

'===================================

End Sub

今回のスクレイピング対象はパチンコビレッジ。以前調査をすることがあって・・・というもの。パチンコって定期的に商品がリリースされ、それら情報をWEBで更新されていくので、スクレイピング実験にはちょうど良いサンプル。遡れば年単位で情報もあるし。1年単位でスクレイピングすると、その年ごとの製品リリース数が分かるし、その年ごとの市況や取り締まり?の影響とかも見いだせる。

メーカーごとにリリース情報を拾うより、こういうまとめサイト?を利用したほうが断然早い。まぁそのサイトの信頼性にもよるけど…。ちなみにもっと掘りたい場合は各商品のページを1つずつ表示しては中身を引っ張る・・・なんてのもいける。phpで出しているから、商品ページのアドレスは予測ついちゃうんだよね。。。

f:id:game-allergy:20210408184435p:plain

【下写真】イミディエイトウィンドウに表示できれば、あとはどんな処理するか考えていけばいろんなころができる

f:id:game-allergy:20210408184525p:plain