【エクセルVBAでIE操作】ディスクリプションなどの要素をname属性でGetする

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


name

photo credit: Writing My Name In The Sand via photopin (license)

みなさん、こんにちは!
WEBスクレイピングのおかげでついでにHTMLにも詳しくなりつつありますタカハシ(@ntakahashi0505)です。

初心者向けエクセルVBAでIEを操作するシリーズも、もう5回目になりました。

なのですが、まだ全然序の口ですね…。まだしばらく続きそうですから、末永くお付き合いください。

さて、前回はコチラの記事。

【エクセルVBAでIE操作】ページ内のリンク先URLを全部取得する
初心者向けエクセルVBAでIEを操作するシリーズの第4回目です。今回はLinksとFor Each~Nextという繰り返し処理を用いてページ内のリンク先URLを全て取得する方法についてお伝えします。

ページ内に存在しているリンク先URLをまとめて取得する方法についてお伝えしました。

今回のお題はSEOでとても重要な役割を果たす「ディスクリプション」。

ディスクリプションとは何か、そしてmetaタグの役割なども踏まえつつ、まさにgetElements~といった命令を使うことで、ページ内からディスクリプションを取得していきたいと思います。

ディスクリプションとは何か

まずディスクリプションとは何かという話ですが、アルファベットではdescriptionと書き、日本語としては「説明」とか「解説」とかいった訳になります。

その名の通り、そのページの説明書きを表す部分でして、例えばGoogleで検索した結果で
いうと

Google検索結果のディスクリプション

この部分に表示されるものです。

SEOでも非常に重要な役割を果たしていまして、Googleのクローラーはこのディスクリプションに記載されているキーワードを重要視して検索結果の順位を決めています。

ちなみに一般的にはディスクリプションの文字数は60~100文字程度が推奨されています。

たまーに、このディスクリプションがスカスカなサイトを見受けますが、たいがいとっても損をしています。

ディスクリプションの書き方

そのディスクリプションはどのようにページのHTMLに記載されているかを見ていきたいと思います。

GoogleChromeなら以下ショートカットが便利なので覚えておきましょうね。

Ctrl + UページのHTMLソースをタブで開く

Ctrl + Fページ内のキーワードを検索する

Ctrl + Gページ内の検索結果の次へ移動する

ではHTMLソースから「description」を探すと

HTMLソースからdescriptionを検索

ここにいましたね。小さくて見づらいですね。その箇所を拾ってきますと

このように記述されています。

書き方としては「<meta name=”description” content=”~”>」という書き方で、いわゆるmetaタグの中に記載して指定をします。

mataタグとはメタ情報つまりそのページをつかさどる色々な項目を指定するためのタグで、ディスクリプション以外にも、言語や文字コードの設定など種類があります。

エクセルVBAでディスクリプションを取得する

ではエクセルVBAを使って、このディスクリプションを取得していきたいと思います。

getElementsByNameを使ってname属性からHTML要素を取得

繰り返しになりますが、ディスクリプションはname属性でdescriptionとされているmetaタグ内のcontent内にあります。

エクセルVBAにはこのname属性でHTML要素を拾ってくる命令getElementsByNameという長いやつがありまして

HTMLドキュメント.getElementsByName(name属性名)

これで取得することができます。この結果は単一の要素ではなくて、要素のコレクションになりますので、それを格納する場合は

Dim コレクション名 As IHTMLElementCollection

と、IHTMLelementCollectionというオブジェクトを用意します。なぜか頭文字として’I’がついているので注意してくださいね。

今回の場合、name属性としてdescriptionを探したいわけですから、取得したコレクションを格納する変数をcolDesとしますと

となります。

コレクションから番号で要素を取り出しさらに属性を取り出す

まず、取得した要素からそのcontent属性を取り出すには

オブジェクト変数.Content

と書きます。例えばid属性でも、value属性でも、type属性でも同じノリで行けます。直感的ですげー覚えやすいです。

ですが、これは単一の要素についてでないとききません。

先ほどgetElementsByNameで取得したものはコレクションつまり集合ですから、コレクションから要素を取り出してからディスクリプションを取り出すという手順になります。

前回のように「For Each~Next」を使ってコレクション内の全ての要素について取り出してくるという方法もあるはあるのですが

name属性がdescriptionのmetaタグはどうせ1つしかありませんから、なんだか冗長ですよね。

別の書き方として、こんな書き方もできます。

コレクション(0).Content 

コレクションの後に括弧、そしてその中に番号を数字で入れます。上記の場合は、「コレクションの0番目の要素」という意味になります。

このコレクションの番号はHTMLドキュメントで先に登場した順に0から採番されていきます。ですから、原則1つしかない要素は、何も考えずともコレクションの0番目の指定で取り出せるわけです。

このコレクションと番号については、覚えておくとかなり使えますよ!

さて、コレクションの0番目の要素からcontent属性をデバッグ表示する場合

となります。

今回のプログラムのまとめはこうなります。

実行してみますと

エクセルVBAでディスクリプションを取得して出力

このようにディスクリプションが表示されます。

まとめ

前述のプログラムですが「Set htmlDoc = ~」までは前回と同じで、今回たった3行追加しただけなのですが

  • getElementsByNameでname属性からコレクションを拾ってくる
  • コレクションの番号で要素を指定する
  • 要素から属性の内容を取り出す

などなど、エクセルVBAにおけるWEBスクレイピングで非常に重要なポイントが凝縮されています。

このgetElementsByNameなのですが、NameだけでなくてTag、IDなどいくつかのバリエーションというか仲間たちがいますので、次回以降紹介できればと思います。

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

どうぞお楽しみに!

連載目次:エクセル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 より:

    先日はどうもありがとうございました!
    (ただのお知らせですので、もちろん非公開で結構ですので、こっそり直されて頂ければと思いました。。)
     ご著書も順調そうで、何よりです。
     今は、仕事で使うのに、このhtmlシリーズで勉強させてもらっています。
     このシリーズをしてもらっていなかったら、一生知らないままで、無駄な作業を繰り返していたと思います!!

     このページの中央当たりのコードで、タグが外れていましたので、お知らせいたします。
     ご参考ください。(「コレクション(0).Content」の下です。)
     これからも楽しみにしています!

  2. SGO より:

    追伸)
    「『‘』objIEで読み込まれているHTMLドキュメントをセット」
    のところが、[‘]と違っていましたので、もし良ければ、そちらもどうぞ。