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

Powershell Powershell

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

あるwebページの中にあるリンクをpowershellの変数として利用したいといった場面があって試してみました。

広告

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.*"}
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をコピーしました