Python
virtualenv
BeautifulSoup

Amazonの漫画売り上げランキングを取得してみる

時々安売りしている電子書籍をチェックしたかったのでスクレイピングに挑戦。
よくよく考えてみればAPIぐらいあるだろと調べてみたらあったので
正当方はこちらかしら。Amazon API を叩いてランキングを取得してみた話 - 片倉工房

準備

Pythonのパッケージングのベストプラクティスについて考える2018 - 朝日ネット 開発者ブログ

virtualenv の --no-site-packages オプションを間違って覚えてた - Study08.net 対シンバシ殲滅用人型機動兵器

よりvenv環境作成

$ python36 -m venv venv
$ source venv/bin/activate
(venv) $ pip install beautifulsoup4
(venv) $ pip install requests
(venv) $ pip install lxml

スクリプト

意外と単純に済んだ。

amrank.py
# vim:set ts=4 expandtab:

import requests
from bs4 import BeautifulSoup


def main():
    url = "https://www.amazon.co.jp/gp/bestsellers/digital-text/2293143051/"
    htmltext = requests.get(url).text
    soup = BeautifulSoup(htmltext, "lxml")

    for el in soup.find_all("div", class_="zg_itemRow"):
        rank  = el.find("span", class_="zg_rankNumber").string.strip()
        name  = el.find_all("div", class_="p13n-sc-truncate")[0].string.strip()
        price = el.find("span", class_="p13n-sc-price").string.strip()
        print("{} {} {}".format(rank, price, name))

if __name__ == "__main__":
    main()
(venv) $ python app.py
1. ¥ 340 ヤングジャンプ 2018 No.28 (未分類)
2. ¥ 300 週刊少年サンデー 2018年29号(2018年6月13日発売) [雑誌]
3. ¥ 280 週刊少年マガジン 2018年 28号[2018年6月13日発売] [雑誌]
4. ¥ 540 転生したらスライムだった件(8) (シリウスコミックス)
5. ¥ 600 つぐもも : 21 (アクションコミックス)
6. ¥ 527 ゴールデンカムイ 14 (ヤングジャンプコミックスDIGITAL)
7. ¥ 607 失格紋の最強賢者 ~世界最強の賢者が更に強くなるために転生しました~ 3 巻 (デジタル版ガンガンコミックスUP!)
8. ¥ 540 犬と猫どっちも飼ってると毎日たのしい(1) (パルシィコミックス)
9. ¥ 583 ちひろさん 1 (A.L.C. DX)
10. ¥ 617 ばらかもん 17巻 (デジタル版ガンガンコミックスONLINE)
11. ¥ 648 実録! わたしがAVに出演した理由 (1) 暴走する女たちの性 (ぶんか社コミックス)
12. ¥ 1,050 まんがで変わる! 仕事は楽しいかね? (きこ書房)
13. ¥ 540 外道の歌(6) (ヤングキングコミックス)
14. ¥ 619 おしかけツインテール 1巻 (まんがタイムコミックス)
15. ¥ 590 がっこうぐらし! 10巻【Amazon.co.jp限定描き下ろし特典付】 (まんが タイムKRコミックス)
16. ¥ 270 週刊少年チャンピオン2018年29号 [雑誌]
17. ¥ 607 神達に拾われた男 1巻 (デジタル版ガンガンコミックスUP!)
18. ¥ 620 モンスター娘のいる日常(14)【電子限定特典ペーパー付き】 (RYU COMICS)
19. ¥ 583 ちひろさん 2 (A.L.C. DX)
20. ¥ 540 ザ・ファブル(14) (ヤングマガジンコミックス)

参考

モードラインを使って、ファイルごとにvimエディタのオプションを指定する。 — 名無しのvim使い
http://nanasi.jp/articles/howto/file/modeline.html
# vim:set expandtab:
Virtualenv の使い方 - Python 入門
http://python.keicode.com/devenv/virtualenv.php
PythonでWebスクレイピングする時の知見をまとめておく - Stimulator
https://vaaaaaanquish.hatenablog.com/entry/2017/06/25/202924
python3でwebスクレイピング(Beautiful Soup) - Qiita
https://qiita.com/matsu0228/items/edf7dbba9b0b0246ef8f
BeautifulSoup4の使い方 - Remrinのpython攻略日記
http://python-remrin.hatenadiary.jp/entry/2017/05/01/152455

Pythonのパッケージングのベストプラクティスについて考える2018 - 朝日ネット 開発者ブログ
http://techblog.asahi-net.co.jp/entry/2018/06/15/162951

virtualenv の --no-site-packages オプションを間違って覚えてた - Study08.net 対シンバシ殲滅用人型機動兵器
http://tell-k.hatenablog.com/entry/2012/01/17/233138

余談
どちらかというとこっちの方が大事な話ですが、virtualenv は1.7 から「--no-site-packages」を指定しなくてもデフォルトの挙動でシステムのsite-packagesが使われないようになりました。代わりに、システムのsite-packagesを利用するための「 --system-site-packages」というオプションが追加されています。
Changes & News — virtualenv 1.7 documentation
ちなみに、1.7で「--no-site-packages」オプションを指定すると下記のように、「もうそれ非推奨だぜ。」と言われます。