ExcelVBA(マクロ):Internet Explorerでタグからテキストを取得する方法/getElementsByTagNameメソッドの使い方

cow IT

IEからWEBページの内容を取得する場合、Documentオブジェクトのプロパティにあるタイトルなどはプロパティを取得すればいいですが、見出しやspan、divなどのタグに関してはいくつあるかもまちまちですし、ID名、クラス名で取得したい場合もあります。
この記事ではタグを指定し、その内容を出力するというコードを紹介します。
※特定のページに過度なアクセスを行うと、サーバに強い負荷をかけエラーの原因になることがあります。極力ページへの遷移は少なくし、まとめて情報を取得するようにしてください。管理者側にも迷惑をかけるため、悪質なスクレイピングを理由に逮捕された事例もあります。

Advertisements

getElementsByTagNameとは

読んで字のごとく、タグ名からElement(要素)を取得するメソッドです。

タグ名から要素を取得
IEオブジェクト.document.getElementsByTagName(“タグ名”)
tagname1
IEオブジェクトの取得について詳しくはNavigateメソッドの記事にゆずりますが、とりあえずDimでInternetExplorer型の変数を作成し、
tagname2
作った変数にIEをSetして、
tagname3
VisibleをTrueにしてIEを表示、Navigateで好きなページへ遷移する、といった手順を踏みます。
tagname4
遷移したらお決まりのコードを入れて、ページが読み込み終わるまで一旦待ちます。
tagname5
もうふたつ変数を作っておきます。iはループ用、hはタグの格納用です。
IHTMLElementはgetElementsByTagNameで取得したタグ(HTMLの要素)を入れておける変数の型です。
tagname6
For Each h In obj.document.getElementsByTagName(“h3”)というのは、遷移したホームページのH3タグを取得し、H3の数だけ処理を実行するという命令です。
tagname7
innerText(要素の内容)を使用し、順番にセルに出力する命令を実行すると、
tagname8
こんな感じで出力されます。
' vba
Option Explicit
Dim obj As InternetExplorer
Set obj = New InternetExplorer
obj.Visible = True
obj.navigate ("https://sunagitsune.com")
Do While obj.readyState <> 4 Or obj.busy = True
DoEvents
Loop
Dim h As IHTMLElement
Dim i As Long
i = 1
For Each h In obj.document.getElementsByTagName("h3")
Cells(i, 1).Value = h.innerText
i = i + 1
Next h
obj.Quit
Beep
やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント