前回、Webページのリンク抽出のスクリプトを作成した(記事)筆者だが、やはり本文もPowerShellで引っ張りたいと考える。もちろんジックリと読むには当然にブラウザで閲覧するが、ササっと記事の概要を把握するには、PowerShellでトンとコマンド入力するだけ。忙しいさなかに、ヘッドラインを把握するにはトップページの文字列を取得するだけで十分な場合もある。

Invoke-WebRequestでWebコンテンツを取得する

Webのコンテンツ(Content)をInvoke-WebRequestで得るのは非常にシンプルなコードで足りる。リンクを抽出する$r.Linksの代わりに、$r.Contentを指定してやればいいのだ。以下を、PowerShell上のnotepad $PROFILEで開くプロファイルに記載して、 .$PROFILEで反映させる。

function web

function web {
param(
    [string]$Site = "https://www.yahoo.co.jp"
)
$r = Invoke-WebRequest $Site
$r.Content
}

ポータルサイトYahoo !のトップページを指定してみると、読めない文字列に圧倒されるがよく見ると、ちゃんと日本語の見出しがあるのが確認できる。

  • ポータルサイトYahoo !のトップページをwebコマンド

    ポータルサイトYahoo !のトップページをwebコマンド

正規表現でHTMLタグを除去してみる

圧倒的に、HTMLタグの<>が多い。正規表現と置換演算子の-replaceで削除すればよいので、タグを消去する<[^>]+>を加えた

-replace '<[^>]+>', ''

を追加したものが以下になる。

function web

function web {
param(
    [string]$Site = "https://www.yahoo.co.jp"
)
$r = Invoke-WebRequest $Site
$r.Content -replace '<[^>]+>', ''

}

これを実行すると、

  • 正規表現でHTMLタグを除去

    正規表現でHTMLタグを除去

さきほどの圧倒的なHTMLタグが削除されて、トップページの主要見出しは日本語で表示される。param関数は、呼び出す際に引数を指定すると上書きされるので、コードを変えずにそのまま、https://news.mynavi.jp/を引数に指定すると

  • web https://news.mynavi.jp/ を実行

    web https://news.mynavi.jp/ を実行

除去しないjavascriptが多くスクロールが非常に長いため、カーソルを下部に移動させなければいけないが、見出しの日本語は表示できる。記事単位のページなどで使えば、さらに効率的に使えるのも事実だ。たとえば、前回のリンク抽出の記事(https://news.mynavi.jp/techplus/article/20260929-linkextraction/)を引数に貼り付けて実行すると、

  • web https://news.mynavi.jp/techplus/article/20260929-linkextraction/を実行

    web https://news.mynavi.jp/techplus/article/20260929-linkextraction/を実行

  • 記事本文も取得できる

    記事本文も取得できる

シンプルなコードは汎用性がある。カスタマイズして、さらに正規表現除去を増やしたりすることでテキストブラウジング機能は充実するが、あくまで、ササっと把握する程度の目的で使うには十分である。