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


list

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

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

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

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

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

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

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

前回のおさらい

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

Yahoo! JAPAN
日本最大級のポータルサイト。検索、オークション、ニュース、メール、コミュニティ、ショッピング、など80以上のサービスを展開。あなたの生活をより豊かにする「ライフ・エンジン」を目指していきます。

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

実行すると、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リンクを取得する処理を追加しました。

こちらです。

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属性を利用して画像ボタンをクリックする

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

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