Webページのリンクを正規表現で検索

私がニュースサイトを見るとき、どのような行動をとるか考えてみました。
1.ブラウザを開く
2.ニュースサイトに移動する
3.トピックの題名を見る
4.気になったものがあればクリックして読む
さて、この中で自動化できるものはないか考えてみました。
まず、2.はサイトのショートカットを作れば自動化できそうです。3.4.はあらかじめ自分が気になりそうな単語を登録しておいて、表示するようにできるかもしれません。(自己分析が必要ですが) これを学習のためPowerShellで行ってみたいと考えました。まず、ニューストピックの項目名(リンク)を取得しなくてはいけません。ということで、Webページのリンクを取得してみたいと思います。今回はオブジェクトから取得するのではなく、ソースから正規表現でリンクのタグを取得するようにしました。以下がプログラムです。

set-PSDebug -strict
# --------------------------------
# Webページのリンクを表示する
# --------------------------------
Function ShowWebPageLinks{

    # url設定
    $url = "http://www.yahoo.co.jp"
        
    # 読み込みコード設定
    $codetype = "utf-8"
    
    # webページのソースを取得
    $source = GetWebPageSource $url $codetype
    
    # ソースからリンクを検索
    $links = SearchLinksFromSource $source
    
    $links | format-List
}

# --------------------------------
# ソースからリンクを検索
# --------------------------------
Function SearchLinksFromSource{
    # 引数取得
    param([string]$source)
    
    # パターン設定
    $pattern = "<\s*?a *?href\s*?=\s*?""(.*?)"".*?>(.*?)< *?/ *?a *?>"
     
    # 改行を削除
    $source = $source -replace "`n",""
    $source = $source -replace "`r",""
    
    # リンクタグを検索(<a href="url">text</a>)
    $results = [regex]::matches($source, $pattern, ("IgnoreCase","SingleLine"))
    
    # 検索結果からアンカーテキストとURLをハッシュに格納
    $links = @{}
    foreach ($match in $results){
        $atext = $match.result("`$2")
        $url = $match.result("`$1")
        $links[$atext] = $url
    }
    
    $links
}

# --------------------------------
# Webページソースを取得する
# 第一引数:URL
# 第二引数:読み込み文字コード
# --------------------------------
Function GetWebPageSource{
    # 引数取得
    param([string]$url, [string]$codetype)
    
    # encoding設定
    $encoding = [system.Text.Encoding]::GetEncoding($codetype)
    
    # webclientオブジェクト生成
    $wc = new-Object System.Net.WebClient
    
    # streamオープン
    # (OpenRead:指定した URI を持つリソースからダウンロードしたデータの読み取り可能ストリームを開きます。)
    $st = $wc.OpenRead($url)
    
    # streamReaderオープン
    $reader = new-Object system.IO.StreamReader($st, $encoding)
    
    # webページ取得
    $source = $reader.readtoend()
    
    # streamクローズ
    $st.close()
    
    # streamReaderクローズ
    $reader.close()
    $source
}