こんにちは、ひぐです!
突然ですが、Amazonの商品購入のスムーズさってやばいですよね。
欲しいと思ってるうちに手が滑って、気づいたら家に届いてるんすよね。
Amazonの滑らかなUIによって、
僕の財布の紐はひもQ並みにゆるゆるになってしまいました。
今回はAmazonでの使いすぎを防ぐべく、
Pythonを用いて「Amazonの合計使用金額を算出」する方法を紹介します。
使用金額を確認して無駄遣いを減らしていきましょう:D
この記事はこの本を参考にしました
gihyo.jp
コード全文
import sys
import os
import re
from robobrowser import RoboBrowser
AMAZON_EMAIL = os.environ['AMAZON_EMAIL']
AMAZON_PASSWORD = os.environ['AMAZON_PASSWORD']
browser = RoboBrowser(
parser='html.parser',
user_agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0')
def main():
sum_money=0
print('Navigating...', file=sys.stderr)
browser.open('https://www.amazon.co.jp/gp/css/order-history')
assert 'Amazonログイン' in browser.parsed.title.string
form = browser.get_form(attrs={'name': 'signIn'})
form['email'] = AMAZON_EMAIL
form['password'] = AMAZON_PASSWORD
print('Signing in...', file=sys.stderr)
browser.submit_form(form, headers={
'Referer': browser.url,
'Accept-Language': 'ja,en-US;q=0.7,en;q=0.3',
})
while True:
assert '注文履歴' in browser.parsed.title.string
print(browser.parsed.title.string)
sum_money+=print_order_history()
link_to_next = browser.get_link('次へ')
if not link_to_next:
print('直近半年のAmazon使用合計金額は')
print(str(sum)+'円です')
break
print('Following link to next page...', file=sys.stderr)
browser.follow_link(link_to_next)
def print_order_history():
"""
現在のページのすべての注文履歴を表示する。
"""
sum=0
for line_item in browser.select('.order-info'):
order = {}
for column in line_item.select('.a-column'):
label_element = column.select_one('.label')
value_element = column.select_one('.value')
if label_element and value_element:
label = label_element.get_text().strip()
value = value_element.get_text().strip()
order[label] = value
print(order['注文日'], order['合計'])
price=re.sub(r'¥ ' ,'',order['合計'])
price=re.sub(',' ,'',price)
sum+=int(price)
return(sum)
if __name__ == '__main__':
main()
コードの概要
Robobrowserというライブラリを用いてブラウザを開き、
フォームに情報を入力し、ログインする。
その後、値段が記載されているCSSの特定の要素を選択し、
for文を用いてページ内の商品を全て取得し合計を出力する。
細かい説明
RoboBrowserってなに?
RoboBrowserはヘッドレスブラウザ(画面が表示されないブラウザ)です。
ブラウザの動きをコードで指定し、自動で動かしてくれるライブラリです。
ヘッドレスブラウザはいくつもあるのですが、robobrowserは
フォームの入力など簡単にできます
GitHub - jmcarp/robobrowser
ちなみに、RoboBrowserでCSSタグを取得するときは、
HTML構文解析ライブラリのBeautiful Soupと同じ記法で出来ます。
kondou.com - Beautiful Soup 4.2.0 Doc. 日本語訳 (2013-11-19最終更新)
os.environってなに?
今回のコードはAmazonにログインするため、メアドとPWが必須になります。
コードに直接個人情報を書き込むのは危険なため、os.environによってローカルの別ファイルに保存してある文字列を読み込んで、実行します。
詳しくは
note.nkmk.me
実行結果
使いすぎワロタ
おわり