WebページのスクレイピングをPowerShell単独でやるのはあまり楽しくありません。
が、C# で用いるようにHtml Agility PackやSGMLReaderを使えば楽に触れます。
今回は、 某ブログをこれらを使って少し見てみましょう。
HTMLパースに何を使うの?
HTML Agility Pack
有名どころなので特にいうことはありません。
これはこれで楽です。
SGMLReader
HTML Agility PackのほかにSGMLReaderが思い出されます。
指摘も読んだり。
PowerShellはLinqメソッドをメソッドチェインで使えないので、Linq to Xmlの利便性を余り享受できず.... 両方比べて見ます。
なにやるの
サイトの記事更新を正座待機すると足がしびれるので任せてしまいます。
そこで某サイトの構造を見ると?

どうやら各記事のタイトルがh2タグで捉えられそうです。あとは、ページを取得してパースするだけです。
Html Agility Pack
さくっとやりましょう。Html Agility PackのdllをAdd-TypeでインポートしてあとはC# で書くのをPowerShellに翻訳するだけです。
結果も取れてます。
Date Result Title ---- ------ ----- 2014/12/25 4:59:12 False 山盛り千切りキャベツを食べない人がいて
SgmlReader
参考サイトのコードがわかりやすいので、PowerShellに直します。
NugetからSGMLReaderのdllを参照に取得してAdd-Typeで参照しましょう。
あとは、HTTP Agility Packと同様の処理ですね。
Date Result Title ---- ------ ----- 2014/12/25 5:08:02 False 山盛り千切りキャベツを食べない人がいて
C# のusing構文がないためusingをしてますがしょーがない。
比較
さくっと使う分には、HTML Agility Packでもさくさくかけますが、微妙に//h2とかがちょっとやですね。
SGMLReaderは読み込み部分さえ作ってしまえばタグ指定も、要素取得も簡単ですね。 PowerShellでもパイプラインでどちらとも同様に扱えるので違和感は少ないです。
まとめ
PowerShellで記事更新監視も簡単ですね。てきとーループとお好きな通知を組み合わせてもいいでしょうし、スケジュールしてもいいでしょう。
do { $result = Get-DullahanArticleCheck -Url "https://donabeneko.jp" -LastTile "山盛り千切りキャベツを食べない人がいて" $result # おすきな通知 # sleep if ($result.Result -eq $false){Start-Sleep -Seconds 300} } while ($result.Result -eq $false)
あまりスクレイピングしないのですが、この程度の軽量さならC# で書いてもどちらでもやりやすい方でいいでしょう。
あ、アドベントカレンダー忘れてないし書きますよ。