【Powershell】webページ内のリンク情報を取り出してみた

Powershell Powershell

あるwebサイトからhrefタグを活用して、Powershellを利用してwebページ内にある特定のリンク情報を取り出してみました。

あるwebページの中にあるリンクを取得して変数に格納したいといった場面があり試してみたので、同じようなことをやりたい人の参考になれば幸いです。

広告

webページ内にある特定のリンク情報を取り出す

今回は、
「www.yahoo.co.jp」のwebページから「news」という文字列を含むリンクを全て取り出す
ということを、実際のpowershellコマンドを利用してやってみました。

Powershellコマンド

$response =Invoke-WebRequest "https://www.yahoo.co.jp/" -UseBasicParsing
$links = $response.Links | Where-Object {$_.href -like "*news*"} | Select-Object -ExpandProperty href
$links

各コマンドの説明

Where-Object {$_.href -like “*news*”}

この部分ではInvoke-WebRequestで帰ってきたレスポンスのリンクの中で、href属性の値で*news*(*は任意の値)を含むものに限定します。

Select-Object -ExpandProperty href

[href属性の値で*news*を含むものに限定] された状態の中で、hrefの値だけを出力するようにソートをかけています。

[Select-Object -ExpandProperty href] なしで実行すると、以下の出力のようにhref属性の値で*news*(*は任意の値)を含む、他の属性値(class、data-ylkなど)も出力されます。

PS C:\> $links = $response.Links | Where-Object {$_.href -like "*news.*"}| Select-Object -ExpandProperty href
PS C:\> $links
           --<中略>--
outerHTML      : <a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" href="https://news.yahoo.co.jp/topics/top-picks" data-ylk="rsec:tpt
                 o;slk:more;pos:0" data-cl-params="_cl_vmodule:tpto;_cl_link:more;_cl_position:0">もっと見る</a>
tagName        : A
class          : yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt
href           : https://news.yahoo.co.jp/topics/top-picks
data-ylk       : rsec:tpto;slk:more;pos:0
data-cl-params : _cl_vmodule:tpto;_cl_link:more;_cl_position:0

outerHTML      : <a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" href="https://news.yahoo.co.jp/topics" data-ylk="rsec:tpto;slk:list
                 ;pos:0" data-cl-params="_cl_vmodule:tpto;_cl_link:list;_cl_position:0">トピックス一覧</a>
tagName        : A
class          : yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt
href           : https://news.yahoo.co.jp/topics
data-ylk       : rsec:tpto;slk:list;pos:0
data-cl-params : _cl_vmodule:tpto;_cl_link:list;_cl_position:0
広告

実行結果

「news」というワードを含むリンクが変数「$links」に格納されて出力されていることが確認できます。

PS C:\> $response =Invoke-WebRequest "https://www.yahoo.co.jp/" -UseBasicParsing
PS C:\>
PS C:\> $links = $response.Links | Where-Object {$_.href -like "*news*"} | Select-Object -ExpandProperty href
PS C:\>
PS C:\> $links
https://news.yahoo.co.jp/pickup/6417115
https://news.yahoo.co.jp/pickup/6417114
https://news.yahoo.co.jp/pickup/6417117
https://news.yahoo.co.jp/pickup/6417113
https://news.yahoo.co.jp/pickup/6417100
https://news.yahoo.co.jp/pickup/6417116
https://news.yahoo.co.jp/pickup/6417109
https://news.yahoo.co.jp/pickup/6417118
https://news.yahoo.co.jp/articles/4aae8104405f10f8157ef5a224526a6b9c6f7a31/images/000
https://news.yahoo.co.jp/topics/top-picks
https://news.yahoo.co.jp/topics
PS C:\>

[参考] Where-Object などでソートしない場合の出力結果

Where-Object などでソートせずに、単純に「$response.Links」だけを実行した場合には以下のような出力となります。

PS C:\> $response.links


outerHTML      : <a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" href="https://www.yahoo.co.jp"
                 data-cl-params="_cl_vmodule:header;_cl_link:logo;_cl_position:0">Yahoo! JAPAN</a>
tagName        : A
class          : yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt
href           : https://www.yahoo.co.jp
data-cl-params : _cl_vmodule:header;_cl_link:logo;_cl_position:0

outerHTML      : <a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt"
                 href="https://paypaystep.yahoo.co.jp/?sc_e=ytmh_p2c_web"
                 data-cl-params="_cl_vmodule:header;_cl_link:paypaystep;_cl_position:0" aria-label="PayPay
                 STEPへ遷移する"><p class="oLvk9L5Yk-9JOuzi-OHW5"><span class="t_jb9bKlgIcajcRS2hZAP">PayPay
                 STEP</span><span class="_2Uq6Pw5lfFfxr_OD36xHp6 _1dr5aVDbNPF63JCS2bJhij _18UPg6R6cxJSC9JHKF8juc"
                 style="width:38px;height:38px"></span></p></a>
tagName        : A
class          : yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt
href           : https://paypaystep.yahoo.co.jp/?sc_e=ytmh_p2c_web
data-cl-params : _cl_vmodule:header;_cl_link:paypaystep;_cl_position:0
aria-label     : PayPay STEPへ遷移する

           --<中略>--

outerHTML      : <a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" href="https://www.z-holdings.co.jp/"
                 data-cl-params="_cl_link:z_comp;_cl_position:0">会社概要</a>
tagName        : A
class          : yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt
href           : https://www.z-holdings.co.jp/
data-cl-params : _cl_link:z_comp;_cl_position:0

outerHTML      : <a class="yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt" href="https://www.z-holdings.co.jp/ir/"
                 data-cl-params="_cl_link:ir;_cl_position:0">投資家情報</a>
tagName        : A
class          : yMWCYupQNdgppL-NV6sMi _3sAlKGsIBCxTUbNi86oSjt
href           : https://www.z-holdings.co.jp/ir/
data-cl-params : _cl_link:ir;_cl_position:0



PS C:\>

この出力を見ると、上記では、
「この出力結果の中から [href] 部分を抜き出して、そのうえで news という単語がが含まれるリンクを抜粋した」ということがより分かるのかなと思います。

広告

「Invoke-WebRequest」実行時にエラーが出た場合

「Invoke-WebRequest」実行時にエラーが出た場合の対処方法については、以下の記事にまとめてありますので参考にしてみてください。

【Powershell】[Invoke-WebRequest]のInternet Explorer エンジンを使用できないエラーについて
を利用したときにエラーが出てきて、解決に苦戦しましたのでその解決策をまとめてみました。 本記事で取り扱うエラー表示 この記事で扱うのは「Invoke-WebRequest」を利用したときに以下のエラーに遭遇した場合についてです。 Invok...

コメント

タイトルとURLをコピーしました