PowerShellでHTMLから要素の情報をDOMで取得する。

powershellコンピュータ
powershell
PowerShellのInvoke-WebRequestコマンドレットでHTMLページを取得したオブジェクトにParsedHTMLというプロパティがあります。こちらのプロパティをDOMでアクセスすることで各要素を取り出すことが出来ます。

class=foo1
class=foo2
id=bar
経済新聞に目を通す情報通 ぱくたその「がちゃ」で引いた画像

HTMLのソース

<div class="foo">class=foo1</div>
<div class="foo">class=foo2</div>
<div id="bar">id=bar</div>
<div class="imglist"><img src="https://maywork.net/wp/wp-content/uploads/2022/05/shinbunGFVL9617_TP_V4-300x200.jpg" alt="経済新聞に目を通す情報通" width="300" height="200" class="size-medium wp-image-8039" /> ぱくたその「がちゃ」で引いた画像</div>

PowerShellスクリプト

$url = "https://maywork.net/computer/powershell-html-dom/"

$o = Invoke-WebRequest -Uri $url

$html = $o.ParsedHTML
# idで絞り込み
$html.getElementById("bar").innerText()
# classで絞り込み
$html.getElementsByClassName("foo") | % { $_.innerText() }
# classで絞り込み後tagで絞り込み
$html.getElementsByClassName("imglist") | % { $_.getElementsByTagName("img") | % { $_.src; $_.alt } }

PowerShellスクリプト実行結果

id=bar
class=foo1
class=foo2
https://maywork.net/wp/wp-content/uploads/2022/05/shinbunGFVL9617_TP_V4-300x200.jpg
経済新聞に目を通す情報通
まず、idをgetElementById()でアクセスしています。
次にclassは複数の要素があることを想定して%(ForEach-Object)で処理しています。
最後にclassで絞り込みを行い、さらにimg要素をgetElementsByTagNameで絞り込み、画像へのリンクアドレスとaltを取得しています。

コメント