プロミディア合同会社の斉藤です。
以前クラウドワークスで
「Excelの表に企業名がたくさん入っているので、それぞれの企業名で検索して1位に出てきたURLを表に記録していきたい」
という要件があり、VBAでサンプルを作成してみました。
その案件はけっきょく受注できなかったのですが、せっかくなので作成したサンプルを公開します。
VBAでスクレイピングの仕様
① IEのオブジェクトを利用する
② セルに入力しておいた企業名をキーワードとしてグーグルで検索する
③ レスポンスされたドキュメントから1位のURLが入っている部分を取得して、それを企業名右のセルに挿入する
④ 4秒待つ
実装のポイント
実装のポイントだけ以下で解説します。
IEオブジェクトの生成
1 |
Set objIE = CreateObject("InternetExplorer.Application") |
グーグルで検索する
1 |
objIE.navigate "https://www.google.co.jp/search?q=" & company |
検索結果が返されるまで待つ
1 2 3 4 5 6 7 8 9 |
IEWait objIE 'IEの読み込み待ち ↓関数 'IEを待機する Function IEWait(ByRef objIE As Object) Do While objIE.Busy = True Or objIE.READYSTATE <> 4 DoEvents Loop End Function |
検索結果から1位のURLを取得する
1 |
Cells(i, 3).Value = objIE.document.getElementsByClassName("rc")(0).GetElementsByTagName("a")(0).href |
1件読み込んだ後に、4秒間何もせず待つようにしています。
このウエイト時間が無いと、50件過ぎたあたりでグーグルから認証が求められてしまうからです。
課題
スクレイピングができることを確認するためのサンプルなので、エラー処理など、細かい対応は入れていません。
・読み込み件数は固定値にしています。
・エラー処理は入れていません。
・中断させる処理は入れていません。
ダウンロード
今回ご紹介したサンプルプログラムは下のボタンからダウンロードできます。