調べるブログ

Apple製品(Mac/iPhone/iPad)、IT、仮想通貨など自分が調べた様々なことを記事にしています。

BeautifulSoupでAmazonランキングデータ「本:コンピュータ・IT」をWebスクレイピングした結果(2018年11月2日版)

当ブログへのご来訪、誠にありがとうございます。



継続してPythonを勉強中

プログラミング言語「Python」を継続して勉強中である。まだWAF「Django」の勉強は始めたばかりだが、いろいろと興味のある分野に着目して組んでみることにした。何事も興味のあることだと成長が速いものだ。

f:id:Loxley:20181102212109j:plain

というわけで「BeautifulSoup」を利用してWebスクレイピングを行い、結果をDBに登録することを始めてみた。

まずはAmazonでPC関連の売れ行きランキングを取得してファイルに保存することはできた。PC自作系パーツはいつが買い時か悩むことがあるので定期的に取得してデータ化しておこうと思う。数カ月後に比較して価格はどう変わったかなど、いろいろと活用してみたい。

結果はメインブログにて公開中。今後も更新予定。

loxley-note.hatenablog.jp

登録するDBは同じなのだが、プログラミング関係はこちらのブログでやったほうがメインブログを見に来る読者の方に迷惑をかけないかな、と。あちらはゲーマーやPC自作er向けだし。 

 

Amazon売れ筋ランキング「本」→「コンピュータ・IT」

で、こちらのサブブログは技術系寄りなのでAmazonの売れ行きランキングのうち、「本」→ 「コンピュータ・IT」をWebスクレイピングして記録していくことにした。

定期的に取得してプログラミング言語や技術のトレンドを追いたいというのが目的だ。

  

以下は取得した結果である。CSVでファイル出力したがそのままだと見にくいのでちょっと加工した。 

左からランキング順位、価格、書籍タイトル名。

 

1. \2430 人工知能プログラミングのための数学がわかる本
2. \250 プログラミング超初心者が初心者になるためのPython入門(1) セットアップ・文字列・数値編
3. \3024 機械学習のエッセンス -実装しながら学ぶPython 数学 アルゴリズム- (Machine Learning)
4. \2800 機械学習のエッセンス 実装しながら学ぶPython、数学、アルゴリズム
5. \1852 エンジニアのための理論でわかるデザイン入門 ThinkIT Books
6. \1080 わずか5分で成果を上げる 実務直結のExcel術
7. \864 Androidタブレット便利すぎる!230のテクニック 2018改訂版
8. \756 最新クレジットカード&電子マネー&ポイント攻略ガイド
9. \1620 動画2.0 VISUAL STORYTELLING (NewsPicks Book)
10. \1620 AI vs. 教科書が読めない子どもたち
11. \2376 独学プログラマー Python言語の基本から仕事のやり方まで
12. \1620 AI×人口減少 これから日本で何が起こるのか
13. \1500 結果が出る 仕事の「仕組み化」
14. \3611 Houdini ビジュアルエフェクトの教科書
15. \3024 深層学習教科書 ディープラーニング G検定(ジェネラリスト) 公式テキスト
16. \1080 10倍ラクして成果を上げる 完全自動のExcel術
17. \1706 Excel 最強の教科書[完全版]――すぐに使えて、一生役立つ「成果を生み出す」超エクセル仕事術
18. \2680 基礎Python 基礎シリーズ
19. \1944 the four GAFA 四騎士が創り変えた世界
20. \886 人工知能に哲学を教えたら (SB新書)

 

ざっと内容をチェックするとPythonや機械学習の書籍が数多くランクインしていることがわかる。 

基礎Python 基礎シリーズ

基礎Python 基礎シリーズ

 

が、結果が妙なので気になった。その内容は後述する。

 

困ったこと

思ったよりもすんなりWebスクレイピングできていたので調子に乗ってプログラムを修正していたのだが、数日後にプログラムを実行し思わぬことがいくつか起きた。 

 

売り切れ対策

前日まで動いていたプログラムがErrorで終了するようになったので調べたところ、 

    price = el.find("span", class_="p13n-sc-price").string.strip()

どうやらAmazonの売上げランキングでは売り切れの場合、価格を表示しないようだ。このため「None」に対して処理を継続しようとして、Errorが発生していた。

上記の要素はGoogle ChromeだとAmazonの該当する本の欄で右クリック→検証をクリックするとデベロッパーツールが起動して対応するプロパティを表示してくれる。(売り切れの場合はこのプロパティが存在しない)

で、対策としてこれを

    price = el.find("span", class_="p13n-sc-price")
    if price == None:
        #在庫切れ(またはunlimited)処理を記述する 

こうすることで 、在庫切れの処理を記述することになる。

売り切れ時はそもそも属性がないことに驚いたが、海外の「Stack Overflow」を見に行くとだいたいみんな同じことで困っていた。

 

なお、Webスクレイピングのコードについては以下の書籍が参考になると思う。他にはてなブログやQiitaの記事も参考にさせていただいた。

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

 

 

ランキングにKindle Unlimitedの結果が混在する?

もう一つ困ったというか、未だに継続して頭を抱えている問題が「Kindle Unlimited」の結果も反映されているのではないかということ。ランキングを見ると上位にKindle Unlimitedで0円の書籍がランクインしていて技術書籍のランキングとしてはあまり正確なものとはなっていないように思える。できれば紙の本だけの売上げランキングが欲しいのだが...。うーむ。

 

例えば、1位の「人工知能プログラミングのための数学がわかる本」だが、Kindle Unlimited会員なら無料で読めるのだ。そりゃ1位にもなるだろう。 

人工知能プログラミングのための数学がわかる本

人工知能プログラミングのための数学がわかる本

 

 

エンジニア的にはかなりコストパフォーマンスの高いKindle Unlimitedだが、集計という面では思わぬ誤算となってしまった。

 

 

使用しているDB

個人目的なのでDBは「SQLite3」を使用している。Python3を使っている人には馴染み深いDBだが、個人ユースだと馬鹿にできない性能を秘めている。同時書き込みさえしなればじつはけっこう使えるのだ。RDBMSの性能比較サイトをチェックしたが、用途によっては高性能であり、Androidアプリで採用されるはずだと思った。

 

逆に複数の書き込みが集中するケースだとSQLiteは使えない。そのためPostgreSQLも並行して勉強中だ。

[改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

[改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 (Software Design plus)

  • 作者: 勝俣智成,佐伯昌樹,原田登志
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/09/14
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る
 

ただ、ユーザーに閲覧させるだけならSQLiteで十分だし、ECやWebサービスでもやろうとしない限り本格的なRDBMSは必要なさそうだ。


  • 当ブログは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。
  • 当ブログ記事の2ch系まとめサイトへの無断転載を禁じます。
  • 投稿した記事内容は私的なものであり、所属する組織・団体に関連性はありません。
  • 投資にはリスクが伴います。利益を得る反面、損失もありえます。投資活動は自己責任で。

(C)LOXLEY-TIPS