CSSセレクタquerySelectorやquerySelectorAllを使用する場合は、HTMLの要素を直に指定する為
HTMLの要素の取得は難しくはありません。
しかしid、Class、Nameなどで要素取得する場合は、取得したい要素を固定できない場合があります。
例)
・複数のテーブルがあり、片一方のテーブルからtdタグを抜き出したい。
(タグの中にある、タグの情報にアクセスしたい。)
・親子のタグが複数あり、範囲を指定してデータを抜き出ししたい。
・複数のテーブルがあり、片一方のテーブルからtdタグを抜き出したい。
(タグの中にある、タグの情報にアクセスしたい。)
・親子のタグが複数あり、範囲を指定してデータを抜き出ししたい。
タグを入れ子にして子要素を取得する
Dim td As HTMLTableCell '■タグを入れ子で取得する。下記の場合はidがAAAAの中のtdタグを抜き出す。 For Each td In objIE.documents.getElementById("AAAA").getElementsByTagName("td") Debug.Print td.innerText Next td '上記の様なデータを取得する事で、(0)のようなインデックス番号を指定せずに要素を取得可能です。 'Debug.Printは今回全てのデータをPrintしてますが、取得した要素から必要なデータかどうか判別すれば、自由にデータが抜き出せると考えます。
Childrenプロパティを使用して子要素を取得する
Dim tr As HTMLTableRow Dim th As HTMLTableCell '■子要素のみループして処理させる。 '■下記であれば一つ目(0)のtrタグ内のthタグを取得 For Each tr In objIE.document.getElementsByTagName("tr").Children(0) Debug.Print th.innerText Next tr '■親要素、子要素を含め全てループして処理させる。 '■下記であれば全てのtrタグ内のthタグを順番に取得 For Each tr In objIE.document.getElementsByTagName("tr") For Each th In tr.Children Debug.Print th.innerText Next th Next tr
その他
Internet Explorerを使用して、Webスクレイピングは敷居が高い風に捉えられますが、
上記のように、パーツ化して組み合わせ処理するだけです。
Web上のデータを触りたい要望は会社様でも個人様でも多いと思います。
VBA IE操作を覚えて効率化しませんか?
作成が大変であれば弊社で代行開発も可能です。お気軽にお問い合わせください。
コメント