「PythonでAmazonの商品検索アプリの作成」で、Amazonの商品検索api(Amazon Product Advertising API)により、ISBNで書籍の表題を取得しましたが、ユーザレビュー等もう少し詳細な情報をISBNをキーにして取得します。
1.商品検索アプリの作成
Amazonの商品検索アプリで次の情報を取得します。
- 表題
- 新品価格
- 中古価格
- 星の数
- ユーザレビュー
各情報を取得するために、次のタグを使用します。
- 表題:title
- 新品価格:lowestnewprice
- 中古価格:lowestusedprice
- ユーザレビューは「customerreviews.iframeurl」を使用することになっていますが、レビュー数が最大3つになっており、「class_=”small”」を検索して、このURLを抽出してユーザレビューを再取得します。なお「星の数」も同じURLで取得します。
- タグの内容を取得しようとしたときに、戻り値が「None」の場合はデータを取得できなかったことを示します(26行目)。タグから文字列を取得しようとしたときに、「AttributeError」の例外が発生するとデータを取得できなかったことを示します(33,39行目等)。
- 表題が取得できない時は検索が失敗したとします。
- 星の数:「class_=”a-icon-alt”」で検索してテキストの部分だけ
- ユーザレビュー:「class_=”a-row review-data”」で検索してテキストの部分だけ、なおレビューは複数個存在します。
- ResponseGroupは、詳細情報を取得するために”ItemAttributes,OfferFull,Reviews”とします。
# /usr/local/bin/python # coding=utf8 import sys sys.path.append('/home/xxxx/.local/lib/python2.7/site-packages/') import bottlenose from bs4 import BeautifulSoup from urllib2 import HTTPError import urllib2 ACCESS_KEY = "xxxxxx" SECRET_ACCESS_KEY = "xxxxxxxxxxxx" ASSOCIATE_TAG = "xxxxxxxxxx" SearchIndex="Books" #参照 Keywords="9784873117782" #検索キーワード amazon = bottlenose.Amazon(ACCESS_KEY, SECRET_ACCESS_KEY, ASSOCIATE_TAG,Region="JP") response = amazon.ItemSearch(SearchIndex=SearchIndex, Keywords=Keywords, ResponseGroup="ItemAttributes,OfferFull,Reviews") soup=BeautifulSoup(response, "lxml") print soup tag = soup.title if tag is None: text = "本が見つかりません" else: text = "表題: " + tag.string.encode('utf-8') + "\n" try: lowestnewpricedata = soup.lowestnewprice.formattedprice.string.encode('utf-8') except AttributeError: lowestnewpricedata = "" text += "新品価格: " + lowestnewpricedata + "\n" try: lowestusedpricedata = soup.lowestusedprice.formattedprice.string.encode('utf-8') except AttributeError: lowestusedpricedata = "" text += "中古価格: " + lowestusedpricedata + "\n" try: html = urllib2.urlopen(soup.customerreviews.iframeurl.string) soupifram = BeautifulSoup(html, "lxml") #print soupifram url = soupifram.find(class_="small").a.get("href") print "***************** " html = urllib2.urlopen(url) soupreview = BeautifulSoup(html, "lxml") text += "星: " + soupreview.find(class_="a-icon-alt").get_text().encode('utf-8') + "\n" text += "ユーザレビュー: " + "\n" reviews = soupreview.find_all(class_="a-row review-data") for review in reviews: text += review.get_text().encode('utf-8') + "\n" + "********" + "\n" except AttributeError: text += "星: " + "\n" text += "ユーザレビュー: " + "\n" print text f = open('body.txt', 'w') f.write( text) f.close()
2.商品検索アプリの実行
作成した商品検索アプリを実行すると、次のようにISBNで指定した書籍の各情報が表示されます。
***************** 表題: 退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング 新品価格: ¥ 3,996 中古価格: ¥ 3,402 星: 5つ星のうち3.7 ユーザレビュー: 基本がわかったうえで、どんなことができるか?を実例で教えてくれます。演習問題がついているので、独学にも良いと思います。仕事の中で必要なときにやりながら読むほうが、断然よいとは思いますが。分厚いですが、わりと読みやすいです。 ******** Python3.6がベース。Windows,Mac,Linux環境対応。初心者にもわかるように、インストール、開発環境の準備の段階から解説してくれている。前半の約258ページ(全652ページ)は、Pythonの言語仕様、各種構文の解説に費やされている。 ******** ※2017/7/12編集部の方から解答の掲載について返信をいただけました。その内容に伴い、☆をひとつ追加修正しました。※2017/8時点、購入者特典として解答例が追加されました。print関数を多用したり、「こうすればこうなる」という ******** さっと書けるスクリプト言語ならではの用途としてこの書籍に掲載されている内容は便利です。ノンプログラマにも書けるよう分量の半分くらいがPythonの文法についてです。ご存知の方はすっ飛ばしてください。ク ******** コードが短く理解しやすいことExcelなしでも使え、速いことライブラリが豊富なこと昔、「退屈な処理」でExcel VBA使ってましたが、遅いしプログラミングは癖があって面倒でした。それに比べpythonは使える!魔法みたいです。 ******** 初心者向けの本をいくつか読みましたが、どのように生かせば良いかモヤモヤしておりましたし、中級者・上級者向けの書籍、ネットの情報では分かりにくかった。この本は、コードも難しくなく、かつ説明も分かりやすかった。 ******** C/C#はよく書きますが,pythonは素人です。{}がなく,インデントでブロックを区切るのが何とも気持ち悪い印象はありますが,簡潔で賢い言語だなと思いました。今までWindowsならバッチ/PowerShell,Linuxならシェルスクリプトで ******** 面倒な処理にpythonを使っちゃいましょうという本なんですが、python初心者の私が読んでもすんなりと入っていける構成です。全体で500ページもあるぶ厚い書籍だが、プログラミングの基本的なところから始まるので、この分量も納得。 ******** 全体を通して難解な説明もなく、ライトな感じです。前半半分はPythonの基礎に割かれているので、本当にノンプログラマー向けです。後半部分も知識としてつけば何かと応用が効くものばかりなので、プログラミングで何か作る ******** 趣味でプログラミングを始めようと思い、とっつきやすいと噂のPythonを学ぶことに。ノンプログラマー向けということでこちらを購入。何かを始めようとするといつも基礎的なところで理解が追い付かず躓いてしまうのですが、 ********