トップ > 備忘録 > Webスクレイピング 4:【実践 1】Google検索結果を取得しシートに書き出し

Webスクレイピング 4【実践 1】Google検索結果を取得しシートに書き出し   2020.07.26

2020年時点での内容です。インターネットエクスプローラーのサポート終了に伴い、本ページのコードは現在では動作しません。記録として残しています。


前記事、アンカー要素のポイントを踏まえ、Googleで検索した結果を取得し、シートに書き出す。取得する情報はページタイトルとリンク先である。

※このページのコードは、VBEの「参照設定」で「Microsoft Internet Controls」と「Microsoft HTML Object Library」が設定されていないと動作しない。詳細はこちら

ポイント

・ページの分析
・クラスの取得
・クラス内タグの取得


【実践 1】Google検索結果の取得

この記事は2021/6/30時点の内容です。
Googleの検索結果ページのHTML構成は変更されることがあります。
HTML構成に変更があると次のコードでは動作しません。ご承知おきください。

1.Google検索結果ページとHTML

次のページを基に情報を取得。
●Google検索 検索キーワード「VBA HTML 変換」



ページソース(HTMLコード)から情報取得(ページタイトル、ページURL)に必要なタグ名やクラス名を探す。


ページの構成は次のようになっている。
・検索結果1つのブロック(上図の薄赤部):g(クラス名)
・ページURL(赤傍線部 1):a要素(タグ名)(青傍線部 1)
・ページタイトル(赤傍線部 2):h3要素(タグ名)(青傍線部 2)

そして「g」クラス内では、ページURLの<a>要素、ページタイトルの<h3>要素、それぞれの要素順が1番目だと確認できる。


2.検索結果情報取得コード

「1.」を基にVBAから情報を取得するコード。

'標準モジュールの宣言セクションに記述
#If VBA7 Then   'Excel2010以上の場合
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else           'Excel2007以下の場合
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Sub Get_GoogleSearch() Dim objIE As New InternetExplorer 'IEのインスタンス作成 Dim datWait As Date, i As Long Dim keyword As String keyword = Range("B2").Value '検索キーワード If keyword = "" Then Exit Sub Call Contents_Clear 'セル[A5:C14]の値をクリア objIE.navigate "https://www.google.co.jp/search?q=" & keyword 'Google検索 datWait = Now() + TimeValue("00:00:10") '10秒後の時間を格納 Do 'Do-Loop間で読込待機。 If datWait < Now() Then End '10秒以上経過したら強制終了 Call Sleep(50) '0.05秒処理を中断 Loop Until objIE.Busy = False And objIE.readyState = READYSTATE_COMPLETE objIE.Visible = True 'IE表示 Dim htmlCls As IHTMLElementCollection Set htmlCls = objIE.Document.getElementsByClassName("g") '「g」クラスコレクションを取得 For i = 1 To htmlCls.Length 'Lengthプロパティはコレクション数を取得する このケースでは「g」コレクションの数 Cells(i + 4, 1) = i Cells(i + 4, 2) = htmlCls(i - 1).getElementsByTagName("h3")(0).innerText 'gクラス内の1番目のh3要素内テキストを取得 Cells(i + 4, 3) = htmlCls(i - 1).getElementsByTagName("a")(0).href 'gクラス内の1番目のa要素href属性を取得 Next Set objIE = Nothing End Sub
Sub Contents_Clear() Range("A5:C14").ClearContents End Sub

コードを実行すると、シートに取得情報が書き出される。



ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.