PythonでAmazonの商品ページをパースしてasinから書籍名を取得する
とある理由でPythonでASIN→書籍名変換をしたいと思います。
前はAmazon APIとかいうのがあって楽に取得できた記憶があるんですが、今はどうやら認証の手続きが必要になったらしく、名前も変わっていました。
認証にシークレットトークンやらsha256のhmacやらなんやらめんどくさい。これ通常の商品ページに正規表現かける方が楽なんじゃないかと思ったのでやってみました。
metaタグのtitleコンテンツにそれっぽい情報が含まれていたのでそれを取得しました。その内容は以下のようなフォーマットになっていそうです。
Amazon.co.jp: (タイトル): (カンマ区切りの著者リスト): (分類)
(タイトル)や(分類)はそれぞれunicodeの数値参照形式(XXXX;)になっているのでそれを実際のunicode文字列に変換する処理をしています。
やってみてから気が付きましたが、amazonの商品ページは1ページあたりの容量が60KBぐらいあって意外にでかいので、速度がほしい場合はAPIを叩いた方が良いかもしれません。
ページのHTMLの構造が変更された場合動かなくなる可能性があるので注意してください。
#! /usr/bin/python.26 # coding: utf-8 import urllib import re def searchBookFromAmazon(asin): try: conn = urllib.urlopen('http://amazon.jp/dp/' + str(asin)) regexp = re.compile(r'<meta name="title" content="(.*?)".*') line = regexp.findall(conn.read())[0] def ref2uni(s): s = s.replace(';', '').replace('&#x', '\u') s = eval('u"' + s + '"') return s line = line.split(': ')[1] # 著者名リストに': 'が含まれていると意図どおりに動かない # 含まれているケースがあるのかどうかは知らない sepindex = line.rindex(': ') lst = line[:sepindex], line[sepindex + 2:] sepindex = lst[0].rindex(': ') lst = lst[0][:sepindex], lst[0][sepindex + 2:], lst[1] lst = map(ref2uni, lst) return dict(zip(['title', 'author'], lst[:-1])) except Exception, e: raise e def main(): import sys if len(sys.argv) < 2: print 'usage: %s asin' % __file__ return data = searchBookFromAmazon(sys.argv[1]) print 'title=%(title)s, author=%(author)s' % data if __name__ == '__main__': main()
実行結果
以下のテストデータでテストしました。うまく行かない例もあるかも。
$ cat Dropbox/dat.txt 4873114616 4893116487 4873113725 1430227907 4839928258 4413003012 4152091312 4022645237 459406194X 4048688782 $ for n in $(cat Dropbox/dat.txt); do python amabook.py $n; sleep 3; done title=iPhoneアプリケーション開発ガイド ―HTML+CSS+JavaScript による開発手法, author=Jonathan Stark, 増井 俊之, 牧野 聡 title=よくわかるゼロからはじめるJavaScript (よくわかるトレーニングテキスト), author=富士通オフィス機器株式会社 title=Prototype & script.aculo.us ―JavaScriptライブラリによるAjaxアプリケーション開発, author=Christophe Porteneuve, 栗山 淳(監訳), 吉田 遼二 title=Pro HTML5 Programming: Powerful APIs for Richer Internet Application Development, author=Peter Lubbers, Brian Albers, Ric Smith, Frank Salim title=実践!Ajaxフレームワーク Prototype.js/Script.aculo.us, author=沖林 正紀 title=試験にでる英単語―耳から覚える, author=森 一郎 title=これからの「正義」の話をしよう――いまを生き延びるための哲学, author=マイケル・サンデル, Michael J. Sandel, 鬼澤 忍 title=悪人(上) (朝日文庫), author=吉田 修一 title=モムチャンダイエット プレミアム (DVD付き), author=チョン・ダヨン title=ゴールデンタイム〈1〉春にしてブラックアウト (電撃文庫), author=竹宮 ゆゆこ
- 作者: Tarek Ziade,稲田直哉,渋川よしき,清水川貴之,森本哲也
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2010/05/28
- メディア: 大型本
- 購入: 33人 クリック: 791回
- この商品を含むブログ (90件) を見る