あるwebサイトからhrefタグを活用して、Powershellを利用してwebページ内にある特定のリンク情報を取り出してみました。
あるwebページの中にあるリンクをpowershellの変数として利用したいといった場面があって試してみました。
webページ内にある特定のリンク情報を取り出す
今回は「www.yahoo.co.jp」のwebページから「news」という文字列を含むリンクを全て取り出す
ということをやってみました。
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...