【エクセルVBAでIE操作】検索結果一覧から記事タイトルを取得する方法


list

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けエクセルVBAでInterneteExplorer(IE)を操作するシリーズです。

前回はこちらの記事でIEを操作して、Yahoo!JAPANの検索窓でキーワード検索をする方法についてお伝えしました。

【エクセルVBAでIE操作】IEで検索窓にキーワードを入力して送信する方法
初心者向けエクセルVBAでIEを操作するシリーズです。今回はIEを操作してWEBページ内の検索窓に任意のキーワードを入力して送信する方法をお伝えします。GoogleChromeの検証機能も活用しますよ!

今回は、その結果表示された検索結果ページから記事タイトルを抽出してみたいと思います。

ということで、エクセルVBAでIEを操作してYahoo検索結果一覧から記事タイトルを取得する方法です。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

前回は以下のYahoo!ページで検索をするマクロを作成しました。

Yahoo! JAPAN
あなたの毎日をアップデートする情報ポータル。検索、ニュース、天気、スポーツ、メール、ショッピング、オークションなど便利なサービスを展開しています。

作成したプロシージャがこちらですね。

Sub MySub()
    
    Dim keyword As String
    keyword = InputBox("キーワードを入力してください")
    
    Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer
    
    objIE.Visible = True
    objIE.Navigate "https://www.yahoo.co.jp/"
    
    Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
        DoEvents
    Loop
    
    Dim htmlDoc As HTMLDocument
    Set htmlDoc = objIE.Document
    
    With htmlDoc
        .getElementById("srchtxt").Value = keyword
        .getElementById("srchbtn").Click
    End With

End Sub

実行すると、InputBox関数による入力ダイアログが表示され、そこに入力したキーワードでYahooの検索をしてくれます。

今回は、その検索結果ページから記事一覧を取得していきますよ。

デベロッパーツールで作戦を練る

Yahooの検索結果ページについて、デベロッパツールで確認して、どのように記事タイトルを取得するか作戦を練りましょう。

Google ChromeでYahooを開いて、適当なワードで検索した結果ページで、デベロッパーツールを開きます。

ショートカットキーは Ctrl + Shift + I ですね。

デベロッパーツールでYahoo検索結果ページを調べる

どうやら、検索結果ページの記事タイトルはh3要素のようです。

その配下にa要素があり、該当のページにリンクすることができます。

さらに、 Ctrl + F で「<h3」と入力してみると、ソース内のh3タグの件数を確認できます。

件数をみると10件、実際の検索結果ページに掲載されている記事タイトルの件数と一致していますので、h3要素を全部取得すれば、目的の記事タイトルをすべて取得できるのでは?ということになります。

検索結果ページから記事タイトルを取得する

HTMLドキュメントからh3要素を取得する

まず、検索結果ページのHTMLドキュメントからh3要素を取得します。

これは、HTMLDocumentオブジェクトのgetElementsByTagNameメソッドで実現できますね。

HTMLDocumentオブジェクト.getElementsByTagName(タグ名)

以下記事でお伝えしたとおりです。

【エクセルVBAでIE操作】hタグなどの要素をタグ名でGetする
エクセルVBAでIEを操作する初心者向けのシリーズの6回目です。今回はタグ名で要素をゴソっと取得するgetElementsByTagNameの使い方です。様々なHTML要素を簡単に取得できます。

HTML要素の直下の子要素をコレクションで取得する

今回の場合は、そのh3要素についてinnerTextを取得すれば記事タイトル自体は取得できるのですが、せっかくなので記事タイトルだけでなく、リンクURLも取得しましょうか。

となると、h3要素の配下のa要素を取得する必要があります。

h3要素はHTMLHeadElementオブジェクトですので、それに対して、さらにgetElementsByTagNameでa要素を取得しても良いのですが、h3要素の配下の要素、すなわち子要素はa要素ひとつなので、この状況を利用しましょう。

特定のHTML要素について、Childrenプロパティを使うことで、その直下の要素をコレクションとして取得できます。

今回の場合は、HTMLHeadElementオブジェクトになりますから、書式は以下の通りです。

HTMLHeadElementオブジェクト.Children

これで取得できるのはコレクションになりますが、子要素はひとつなので丸かっこでインデックス0を指定すれば、a要素を単体オブジェクトとして取得できますね。

Yahooの検索結果ページの記事を取得するプロシージャ

ということで、冒頭のプロシージャに加えて、検索結果ページの記事タイトルとそのURLリンクを取得する処理を追加しました。

こちらです。

Sub MySub()
    
    Dim keyword As String
    keyword = InputBox("キーワードを入力してください")
    
    Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer
    
    objIE.Visible = True
    objIE.Navigate "https://www.yahoo.co.jp/"
        
    Wait objIE
    
    Dim htmlDoc As HTMLDocument
    Set htmlDoc = objIE.Document
    
    With htmlDoc
        .getElementById("srchtxt").Value = keyword
        .getElementById("srchbtn").Click
    End With
    
    Wait objIE
    Set htmlDoc = objIE.Document
    
    Dim h3 As HTMLHeadElement
    For Each h3 In htmlDoc.getElementsByTagName("h3")
        Dim anchor As HTMLAnchorElement
        Set anchor = h3.Children(0)
        Debug.Print anchor.innerText, anchor.href
    Next h3
    
End Sub

Sub Wait(ByVal objIE As InternetExplorer)

    Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
        DoEvents
    Loop

End Sub

25~30行目が今回解説した内容をもとに作った処理ですね。

h3要素を取得して、それについてFor Each文でループを回し、Childrenプロパティでa要素を取得しています。

なお、読み込み待ちの処理は複数回必要になりましたので、WaitというSubプロシージャに分離しました。

実行すると、以下のように記事一覧とリンクURLがイミディエイトウィンドウに出力されます。

VBAで取得した記事一覧とリンクURL

まとめ

以上、エクセルVBAでIEを操作してYahoo検索結果ページから記事タイトルとURLを取得する方法をお伝えしました。

もうなんとなくおわかりだと思いますが、デベロッパーツールで目的のモノを取得できることが見いだせたのであれば、もうプログラムの大方は出来上がったと言っても良いですね。

次回は続きになりますが、せっかくなので記事詳細も取得してみたいと思います。

どうぞお楽しみに!

連載目次:エクセルVBAでIEを操作してWEBスクレイピング

IEを操作してWEBページのデータを取得して、エクセルのデータとして取り込む、つまりWEBスクレイピングをエクセルVBAで実現します。各種WEBページを課題として様々なデータの取得の仕方を解説していきたいと思います。

  1. 【エクセルVBAでIE操作】10分で終わるセッティングとWEBページの閲覧確認
  2. 【エクセルVBAでIE操作】HTMLタグと要素そしてドキュメントの取得
  3. 【エクセルVBAでIE操作】ブラウザの読み込み待ちをしないとダメなのです
  4. 【エクセルVBAでIE操作】ページ内のリンク先URLを全部取得する
  5. 【エクセルVBAでIE操作】ディスクリプションなどの要素をname属性でGetする
  6. 【エクセルVBAでIE操作】hタグなどの要素をタグ名でGetする
  7. 【エクセルVBAでIE操作】WEBページのテーブル要素を自動で取得する方法
  8. 【エクセルVBAでIE操作】WEBページのテーブル要素からセルのデータを取り出す方法
  9. 【エクセルVBAでIE操作】IEで検索窓にキーワードを入力して送信する方法
  10. 【エクセルVBAでIE操作】検索結果一覧から記事タイトルを取得する方法
  11. 【エクセルVBAでIE操作】ブログの記事一覧ページから公開日とカテゴリを取得する
  12. 【エクセルVBAでIE操作】ページャーをめくって複数ページからデータを取得する
  13. 【エクセルVBAでIE操作】ユーザー名とパスワードを入力してログインをする
  14. 【エクセルVBAでIE操作】name属性を利用して画像ボタンをクリックする
  15. 【エクセルVBAでIE操作】alt属性・src属性を利用して画像ボタンをクリックする

タイトルとURLをコピーしました