PowerShellを使ってWebサイトにアクセスする

PowerShellを使ってWebサイトから情報を集める方法を説明します。今回はAmazon.co.jpからデータを取得して、本の売れ筋ランキングを表示するスクリプトを作成してみます。

PowerShellでWebにアクセスするには、Invoke-WebRequest –Uri [アクセスするURL]
を使用します。Amazonの売れ筋ランキングサイト(http://www.amazon.co.jp/gp/bestsellers/books)にアクセスするには次のコマンドを実行してください。

$request = Invoke-WebRequest -Uri “http://www.amazon.co.jp/gp/bestsellers/books”

これで、変数$requestにWebサイトのデータが保存されます。

この後は、$requestに保存されたデータの中から売れ筋ランキングの書籍名が記載されたタグなどを手掛かりにして、書籍名を取得する方法を探り当てる作業が必要になります。Google Chromeであれば書籍名を右クリックし、メニューの【検索】を押すと書籍名の書かれたタグが表示されるので、そのタグ情報をメモします。

売れ筋ランキングでは、<div class=”p13n-sc-truncate p13n-sc-truncated-hyphen p13n-sc-line-clamp-2″>というclassがキーになっていたので、次のコードを打ちます。

$titles = $request.ParsedHtml.getElementsByClassName("p13n-sc-truncate p13n-sc-truncated-hyphen p13n-sc-line-clamp-2")

これで必要なデータを切り出すことができました。最後に次のコマンドでランキングを表示させて完成です。

$i = 1; $titles | % {$_.innerHTML} | % {$i.ToString("00") + ":" + $_; $i++}

<出力結果>
01:モデルが秘密にしたがる体幹リセットダイエット
02:自動的に夢がかなっていく ブレイン・プログラミング
03:漫画 君たちはどう生きるか
04:生きていくあなたへ 105歳 どうしても遺したかった言葉
05:CUNE® (e-MOOK 宝島社ブランドムック)
06:長濱ねる1st写真集 ここから
07:大人の科学マガジン 小さな活版印刷機
08:しいたけ占い 12星座の蜜と毒
...
(以下略)

(順位を表示させるために$i変数を使用しています。単純にタイトル名だけを順番に表示させるだけであれば $titles | % {$_.innerHTML} と打てば問題なく表示されます)

上の説明は、Amazonの売れ筋ランキングの「全てのカテゴリ」を例にとりましたが、サブカテゴリのコンピュータ・ITのさらに下、プログラミングの売れ筋ランキングが知りたければ、最初のコマンドを次のように書き換えます。

$request = Invoke-WebRequest –Uri "https://www.amazon.co.jp/gp/bestsellers/books/492352/ref=zg_bs_nav_b_2_466298"

後は上と同じコマンドを入力すればプログラミングの売れ筋ランキングが表示されます。

注意:プログラムによるインターネットからのデータ取得はサーバに大きな負荷を与える可能性があるため、利用には十分注意してください。