IEからWEBページの内容を取得する場合、Documentオブジェクトのプロパティにあるタイトルなどはプロパティを取得すればいいですが、見出しやspan、divなどのタグに関してはいくつあるかもまちまちですし、ID名、クラス名で取得したい場合もあります。
この記事ではタグを指定し、その内容を出力するというコードを紹介します。
※特定のページに過度なアクセスを行うと、サーバに強い負荷をかけエラーの原因になることがあります。極力ページへの遷移は少なくし、まとめて情報を取得するようにしてください。管理者側にも迷惑をかけるため、悪質なスクレイピングを理由に逮捕された事例もあります。
getElementsByTagNameとは
読んで字のごとく、タグ名からElement(要素)を取得するメソッドです。
タグ名から要素を取得
IEオブジェクト.document.getElementsByTagName(“タグ名”)
IEオブジェクト.document.getElementsByTagName(“タグ名”)
IEオブジェクトの取得について詳しくはNavigateメソッドの記事にゆずりますが、とりあえずDimでInternetExplorer型の変数を作成し、
作った変数にIEをSetして、
VisibleをTrueにしてIEを表示、Navigateで好きなページへ遷移する、といった手順を踏みます。
遷移したらお決まりのコードを入れて、ページが読み込み終わるまで一旦待ちます。
もうふたつ変数を作っておきます。iはループ用、hはタグの格納用です。
IHTMLElementはgetElementsByTagNameで取得したタグ(HTMLの要素)を入れておける変数の型です。
IHTMLElementはgetElementsByTagNameで取得したタグ(HTMLの要素)を入れておける変数の型です。
For Each h In obj.document.getElementsByTagName(“h3”)というのは、遷移したホームページのH3タグを取得し、H3の数だけ処理を実行するという命令です。
innerText(要素の内容)を使用し、順番にセルに出力する命令を実行すると、
こんな感じで出力されます。
' 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やメソッドの諸機能を、機能の名称から探せるまとめ記事です。
コメント