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で出しているから、商品ページのアドレスは予測ついちゃうんだよね。。。
【下写真】イミディエイトウィンドウに表示できれば、あとはどんな処理するか考えていけばいろんなころができる