質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

867閲覧

RoboBrowserの使い方

dialectic4th

総合スコア16

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2018/09/18 15:34

現在、
本『Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-』
に書かれている下記のAmazon注文履歴スクレイピングの勉強をしております。

これを元に、画像のように注文履歴の表示画面において過去6ヶ月間から2018年へ変更するように書き換えたいのですが、どのようにすれば良いのでしょうか?
恐らくログイン後に、ボタンを押すようにすれば良いとは思うのですが、書き方がわかりません。

よろしくお願いします。

python3

1import sys 2import os 3import re; re._pattern_type = re.Pattern 4from robobrowser import RoboBrowser 5import csv 6AMAZON_EMAIL = os.environ['AMAZON_EMAIL'] 7AMAZON_PASSWORD = os.environ['AMAZON_PASSWORD'] 8 9# RoboBrowserオブジェクトを作成する。 10browser = RoboBrowser( 11 parser='html.parser', # Beautiful Soupで使用するパーサーを指定する。 12 # Cookieが使用できないと表示されてログインできない問題を回避するため、 13 # 通常のブラウザーのUser-Agent(ここではFirefoxのもの)を使う。 14 user_agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0') 15 16 17def main(): 18 # 注文履歴のページを開く。 19 print('Navigating...', file=sys.stderr) 20 browser.open('https://www.amazon.co.jp/gp/css/order-history') 21 print(browser.parsed.title.string) 22 # サインインページにリダイレクトされていることを確認する。 23 assert 'Amazonログイン' in browser.parsed.title.string 24 25 # name="signIn" というサインインフォームを埋める。 26 # フォームのname属性の値はブラウザーの開発者ツールで確認できる。 27 form = browser.get_form(attrs={'name': 'signIn'}) 28 form['email'] = AMAZON_EMAIL # name="email" という入力ボックスを埋める。 29 form['password'] = AMAZON_PASSWORD # name="password" という入力ボックスを埋める。 30 31 # フォームを送信する。正常にログインするにはRefererヘッダーとAccept-Languageヘッダーが必要。 32 print('Signing in...', file=sys.stderr) 33 browser.submit_form(form, headers={ 34 'Referer': browser.url, 35 'Accept-Language': 'ja,en-US;q=0.7,en;q=0.3', 36 }) 37 38 # ログインに失敗する場合は、次の行のコメントを外してHTMLのソースを確認すると良い。 39 # print(browser.parsed.prettify()) 40 # ページャーをたどる。 41 while True: 42 assert '注文履歴' in browser.parsed.title.string # 注文履歴画面が表示されていることを確認する。 43 44 print_order_history() # 注文履歴を表示する。 45 46 link_to_next = browser.get_link('次へ') # 「次へ」というテキストを持つリンクを取得する。 47 if not link_to_next: 48 break # 「次へ」のリンクがない場合はループを抜けて終了する。 49 50 print('Following link to next page...', file=sys.stderr) 51 browser.follow_link(link_to_next) # 「次へ」というリンクをたどる。 52 53def print_order_history(): 54#質問外なので省略

イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

僕も同じ本を読んでいます。奇遇ですね。

まずブラウザの開発者ツールを利用してタグを解析します。
セレクトボックスを右クリックして、要素の調査(Firefoxの場合、 Google Chromeであれば検証)を押します。
すると開発者ツールが開いて指定した要素周辺の情報を表示してくれます。
構造としては

HTML

1<form id="timePeriodForm"> 2 <span> 3 <select id="orderFilter"> 4 <option value="last30"> 5 <option value="year-2018"> 6 <option value="year-2017"> 7 ... 8 </select> 9 </span> 10</form>

このようになっていることがわかるはずです。(今回の回答に必要のない属性は省略しています)
ここからは本の中で使用している方法とほぼ同じなので説明は割愛します。

Python

1timePeriodForm = browser.get_form(id='timePeriodForm') 2timePeriodForm['orderFilter'].value = "year-2017" 3browser.submit_form(timePeriodForm, headers={ 4 'Referer': browser.url, 5 'Accept-Language': 'ja,en-US;q=0.7, en;q=0.3', 6})

これをあなたのコードのwhile True: 行の手前に配置すればできるはずです。
(違いがわかりやすいようにあえて2017年のものにしておきました。)

投稿2018/09/19 02:22

編集2018/09/19 02:23
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dialectic4th

2018/09/19 02:33

``` timePeriodForm = browser.get_form(id='timePeriodForm') timePeriodForm['orderFilter'].value = "year-2017" ``` この部分が理解できてなかったことが理解できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問