PowerShell7のInvokeWebRequest()にはParsedHtmlが残念ですが無いので、別の方法を考えてみます。
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>
PowerHTMLモジュールのインストール
Install-Module -Name PowerHTML
PowerShellスクリプト
$url = "https://maywork.net/computer/powershell-html-dom/"
$html = Invoke-WebRequest -Uri $url | ConvertFrom-HTML
# idで絞込
$html.SelectNodes("//div[@id=""bar""]").innerText
# classで絞込
$html.SelectNodes("//div[@class=""foo""]") | % { $_.innerText }
# classで絞込後tagで絞込
$html.SelectNodes("//div[@class=""imglist""]/img") | % {
$_.Attributes["src"].Value
$_.Attributes["alt"].Value
}
PowerShellスクリプトの実行結果
id=bar
class=foo1
class=foo2
https://maywork.net/wp/wp-content/uploads/2022/05/shinbunGFVL9617_TP_V4-300x200.jpg
経済新聞に目を通す情報通
PowerShell Galleryでモジュールを探してみたところPowerHTMLというモジュールが良さそうなので試してみました。
PowerShell5.1でInvokeWebRequest().ParsedHtmlで取得した結果と同じ値を取り出すことが出来ました。
PowerHTMLはHTML Agility PackというC#のライブラリをPowerShellからアクセスしやすくしたラッパーとのことですが、XPathでHTML要素を指定しています。
XPathは初めて扱いましたが、直感的でわかりやすい記述方法だと思いました。
PowerHTML 0.1.7
Provides a wrapper for HTML Agility Pack for use where the IE HTML DOM from Invoke-WebRequest is not available such as P...
PowerShell5.1でInvokeWebRequest().ParsedHtmlで取得した結果と同じ値を取り出すことが出来ました。
PowerShellでHTMLから要素の情報をDOMで取得する。
PowerShellのInvoke-WebRequestコマンドレットでHTMLページを取得したオブジェクトにParsedHTMLというプロパティがあります。こちらのプロパティをDOMでアクセスすることで各要素を取り出すことが出来ます。cl...
PowerHTMLはHTML Agility PackというC#のライブラリをPowerShellからアクセスしやすくしたラッパーとのことですが、XPathでHTML要素を指定しています。
XPathは初めて扱いましたが、直感的でわかりやすい記述方法だと思いました。
コメント