あぷつう.com

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

*

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

      2019/04/13

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ループしてURLをここでは作り出しているだけです。中身はこんな感じになる。
https://www.amazon.co.jp/gp/bestsellers/digital-text/2293143051/?pg=1
https://www.amazon.co.jp/gp/bestsellers/digital-text/2293143051/?pg=2


https://www.amazon.co.jp/gp/bestsellers/digital-text/2293143051/?pg=5

もし、別のランキングをやりたければ、URLを変更すればいいだけ。

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

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

各要素を抜き取る

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

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

ここで抜き取ったデータはランク・タイトル・URL・画像URL・価格のデータを取得しています。
class後に記入しているものが抜き取りたいデータを指定しています。
例えばランクの場合、classが”zg_rankNumber”のstring(文字)をstrip()で空白・改行をなくして取得して、辞書型にするということになります。

これをただループして処理しているだけです。

classがどうやってわかるかと言うと、Googleのデベロッパーツールでわかったりします。
わからない人は初心者向け!Chromeの検証機能(デベロッパーツール)の使い方を確認してランキングはHTMLでどのように書かれているか確認してください。ある程度HTML・CSS知識を持っておくと理解はしやすくなります。

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

CSV出力

CSV出力のために抜き取ったデータをすべてリストに追加します。
そのため、空のリストを最初に用意しています。

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

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

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

Macだとencoding=’utf-8’でよかったと思います。

あと、HTMLの知識を上手く使うとDMでよくある画像が見れるメールを送ることもできます。
その辺は次回ぐらいに紹介しようと思います。

使用した書籍

 - program