あぷつう.com

弱ニートだから楽しいことだけやっていく

*

pythonでAmazonランキングをスクレイピングしてCSVで出力

   

pythonで最近スクレイピングにハマっているらくがきです。

Amazonランキングっていちいち次ページを押さないとランキングが見れないので、めんどくさいんですよね

amazonのRSSでランキングを取ろうとしても、ランキングは20位くらいしかないし…AmazonのAPIも同様な感じ。

ってことで簡単にpythonでスクレイピングして、快適なAmazonライフをしてみたいと思います。

Amazonランキングをスクレイピング

Amazonのランキングをスクレイピングする前に予習することをオススメしています。
Beautiful SoupとPandasはインストールしないとエラーがでてしまい。出力できなくなります。

PythonとBeautiful Soupでスクレイピング

Python データ処理ライブラリ Pandas の導入とそのデータ型

以上を確認してもらってから説明に移ります。

まずは簡潔にすべてのコードになります。

各コードについては順番に説明していきます。
ちなみに、自分の使用環境はwindows10になりますので、Macなどでは少し異なる部分もあります。

また今回のコードは、Amazonのkindleのベストセラーランキングをスクレイピングしたものなので、別のベストセラーをスクレイピングしたい場合は下の説明を参考にしてください。

サイトの情報をまず抜き取る

Amazonのベストセラーランキングは100位まであり、20づつで5ページ分あります。
そのすべてのページのURLをこのように表記しています。

forで5回ループさせて、5ページ分を取得しています。

categoryやbrowse_node_idは見たいランキングによって異なってきますので、AmazonのURLを確認して変更してください。

そして、これだけではサイトの情報を抜き取れていないので、BeautifulSoupを使用して情報をhtml形式で抜き取ります。その部分がこのコードになります。

繰り返し使うため、関数(def)でまとめています。

各要素を抜き取る

各ページのhtml形式を抜き出せても、知りたいのはランキングです。
ランキングを抜き取るコードは以下の部分になります。

各ページ分のURLをforでループ→URLに記載されたhtmlをすべて抜き取り→forでさらにループしてfindallでさらに細かい要素を抜き取り、辞書に詰め込む。

ちなみに、titleのコードの一部の[0]を[1]に変えると無料タイトルを取得できたりします。

CSV出力

CSV出力にはリスト化させて出力するため一回リストに追加しています。
そのため、空のリストを用意しています。

リスト(info)に追加された情報は、pandasを使用してCSVで出力しています。

datetimeを使用していますが、これはファイルを日付毎に管理したかったのでいれました。
なくても問題はありません。

また、encoding=’utf-8_sig’を使用しているのは、windowsだと文字化けが起こりやすくその文字化け解消のために入れています。

Macだと入れなくてもいいと思います。

ちなみに、上手くいくとこんな感じに出力できちゃいます。
scraping

使用した書籍

 - Python