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を取得しています。
次にclassは複数の要素があることを想定して%(ForEach-Object)で処理しています。
最後にclassで絞り込みを行い、さらにimg要素をgetElementsByTagNameで絞り込み、画像へのリンクアドレスとaltを取得しています。
追記
この記事の内容はWindowsPowerShellで動作確認していますがPowerShell7では動きません。
IEのオブジェクトを使ってHTMLの情報を取得する手段として便利に使っていたのですが、PowerShell7で動かないところを見るとIEのサポート終了に関連しているのかもしれません。
このテーマは一定の需要があるので探せば代わりになる方法は沢山ありそうですので困ることは無さそうですが…
この記事の内容はWindowsPowerShellで動作確認していますがPowerShell7では動きません。
IEのオブジェクトを使ってHTMLの情報を取得する手段として便利に使っていたのですが、PowerShell7で動かないところを見るとIEのサポート終了に関連しているのかもしれません。
このテーマは一定の需要があるので探せば代わりになる方法は沢山ありそうですので困ることは無さそうですが…
PowerShell7でスクレイピングする方法を模索する。【PowerHTML・HTML Agility Pack】
PowerShell7のInvokeWebRequest()にはParsedHtmlが残念ですが無いので、別の方法を考えてみます。class=foo1class=foo2id=bar ぱくたその「がちゃ」で引いた画像HTMLのソース<div...
コメント