【エクセルVBAでIE操作】hタグなどの要素をタグ名でGetする

★気に入ったらシェアをお願いします!


タグ

みなさん、こんにちは!
引き続きWEBスクレイピングをし続けていますタカハシ(@ntakahashi0505)です。

引き続きの初心者向けエクセルVBAでIEを操作するシリーズです。今回は第6回目ですよ。

前回はこちらの記事。

【エクセルVBAでIE操作】ディスクリプションなどの要素をname属性でGetする
初心者向けエクセルVBAでIEを操作するシリーズ第5回目です。getElementsByNameでディスクリプションなどの要素をname属性を条件として取得する方法についてお伝えします。

getElementsByNameを使って、WEBページのディスクリプションを取得する方法をお伝えしました。

name属性は要素に名前を設定するための属性なので、ピンポイントで要素を取得したいときには使い勝手が良いです。

しかしながらサイトや取得したい要素によってはname属性が付与されておらず、目的のものを探り当てられない場合も少なくありません。

そんなときにはタグ名でつかんでしまえばOKです。

今回はgetElementsByTagNameで特定のHTML要素をタグ名で取得する方法についてお伝えします。

実際に、WEBスクレイピングをする際にはかなりの頻度でお世話になりますよ。

では早速いってみましょう!

今回はhタグを取得してみます

WEBページの要素をタグ名で取得する方法をお伝えしていきます。お題として見出しに使うhタグを使ってみましょう。

hタグとは

<h1>~<h6>のhとはHeadingの略で、見出しを意味します。 <h1>が最上位の見出し(大見出し)で、以下数字が小さくなるにつれて下位の見出し(小見出し)となります。 <h6>が最下位の見出しです。

引用:HTMLクイックリファレンス

とのことです。

書籍などでは見出しはとても大事ですよね。見出しがあることで、文章の構造が把握できるようになります。

WEBページでも非常に重要な役割をはたしていまして、読者も該当のページを構造的に読みやすくなるというメリットも当然ありますし、さらにはGoogleのクローラーもhタグの構造を重視して評価や分析をしているのでSEOの視点でも重要です。

hタグを上手に使えていると、人にも機械にも優しいWEBページになるということですね。

書き方としては他のHTML要素と同様に「<h1>~</h1>」という形でタグの間に表示するテキストを挟む書き方です。

HTML要素に関してはこちらの記事に詳しく書いていますので、ご覧いただければと思います。

【エクセルVBAでIE操作】HTMLタグと要素そしてドキュメントの取得
初心者向けエクセルVBAでIEを操作するシリーズの第2回目です。今回はHTMLタグと要素について簡単に説明をしつつIEで開いたページのHTMLドキュメントを取得する方法についてお伝えします。

getElementsByTagNameを使ってタグ名で要素を取得

タグ名でHTML要素を拾ってくる際はgetElementsByTagNameを使います。

相変わらず文字数が長いですが、正直、前回お伝えしたname属性で取得するよりもシンプルです。

HTMLドキュメント.getElementsByTagName(タグ名)

getElementsByNameと同様、単一の要素ではなくて要素のコレクションとして取得します。

例えば、HTMLドキュメントオブジェクトがhtmlDoc、h1~h3タグを取得する場合は

とすることで、取得したh要素がコレクションとしてcolH1~colH3に格納されます。

innerTextでタグ内のテキストを取得する

では取得したhタグの中身を取り出したいと思います。

取得したタグ要素内のテキストを取得する場合はinnerTextを使って

オブジェクト変数.innerText

と書きます。”中のテキスト”ということですね。

これを使って、先ほど取得したhタグコレクションを全てイミディエイトウィンドウに出力する場合は

このように書きます。

WEBスクレイピングの際は、このようにgetElementsBy~でコレクションでHTML要素をコレクションで取得する仕方を本当にたくさん使いますので、ぜひ使いこなせて頂ければと思います。

最後にまとめとして、h1~h3タグを全て取得してイミディエイトウィンドウに出力するプログラムを書いておきますね。

「Set htmlDoc=~」まではこれまでと同じですので、必要に応じて復習してみて下さいね。

まとめ

今回はgetElementsByTagNameで特定のタグ要素をコレクションとして取得する方法についてお伝えしました。

繰り返しになりますが、HTMLはタグ要素の連続でできていますから、理論上は今回の方法で、全てのHTML要素にアクセスすることができるようになります。

また、要素内のテキストを取り出すinnerTextについてもお伝えしました。これも非常に高い頻度で活用しますので、よく覚えて頂ければと思います。

次回はテーブル要素を取得する方法についてお伝えしています。

【エクセルVBAでIE操作】WEBページのテーブル要素を自動で取得する方法
初心者向けエクセルVBAでIEを操作するシリーズ7回目。今回はHTMLにおけるテーブルの構成の仕方に触れつつ、そのテーブル内のデータを取得するというWEBスクレイピングらしいテクニックを解説します。

どうぞお楽しみに!

連載目次:エクセル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操作】IEで検索窓にキーワードを入力して送信する方法
  9. 【エクセルVBAでIE操作】ページをクロールしてブログの記事一覧を取得する方法
  10. 【エクセルVBAでIE操作】ブログの記事一覧ページから公開日とカテゴリを取得する
  11. 【エクセルVBAでIE操作】ページャーを最後のページまでどんどんリンクする
  12. 【エクセルVBAでIE操作】ユーザー名とパスワードを入力してログインをする

連載目次:データ一覧から請求書を自動で作る

お仕事において特定のデータ一覧から必要な情報を抽出するということは頻繁にありうると思います。ここではデータ一覧から請求書を作るということを目標に、実務で使えるスキルをまっすぐに身に着けることを目的としています。
  1. 【初心者向けエクセルVBA】データ一覧から請求書を自動で作る
  2. 【初心者向けエクセルVBA】For~Next文で簡潔にプログラムを書く
  3. 【初心者向けエクセルVBA】行の数をカウントする&不要な行を隠す
  4. 【初心者向けエクセルVBA】文字列の連結&Format関数での書式変更
  5. 【初心者向けエクセルVBA】If~Thenを使った条件分岐の超入門
  6. 【初心者向けエクセルVBA】Public変数の宣言とSubプロシージャの呼び出し
  7. 【初心者向けエクセルVBA】InputBoxでの日付入力と月末日の自動算出
  8. 【初心者向けエクセルVBA】Worksheetのコピーを活用して複数の請求書を作る
  9. 【初心者向けエクセルVBA】ファイルのコピーを使って取引先別の請求書を作る
  10. エクセルVBAでDateAdd関数を使って年月を条件としてSumIfs関数を使う方法
  11. 宣言もセットも不要!エクセルVBAでワークシートをオブジェクト名で取り扱う方法
  12. エクセルVBAでシートの列の挿入も簡単に対応できちゃう列挙体の使い方

コメント

  1. SGO より:

    いつもどうもありがとうございます。

    すみません。
    最後のまとめプログラムを「JR東日本」に変えて実行しますと、次のような結果になりました。
    ■h1
    ■h2
    コンテンツメニュー
    JR東日本各種サービス
    ■h3

    「ctrl+U」で確認してみますと、以下のものだけを抜いているようなのですが、問題ないでしょうか?
    コンテンツメニュー
    JR東日本各種サービス

    ◆ 例えば、次のh2タグは抜かないものでしょうか?
    (あまりお話を理解していない質問だと思いますが、、、)

     もし良かったら教えて頂ければありがたいです。よろしくお願いします。

    • SGOさん

      コメントありがとうございます!
      現在のJR東日本のページですと、おっしゃる出力が正しいものと思います。

      テキストが出力されたもの以外のh1,h2,h3タグも存在しているのですが、aリンクだったり、img画像だったりしますので、innerTextプロパティでは取り出すことができません。
      もし、aタグやimgタグなども含めてHTMLを取り出すのであれば、innerHTMLプロパティを使って

      とすればタグも含めて取り出すことができます。