投稿日
2010/11/24 水曜日
風邪を引いてしまいました。鼻風邪ってやつです。熱は大したことないですが頭痛が辛いです。
自動でネットをクロールしAmazonアソシエイトリンクを収集するロボットを作って、いわゆる話題の商品なんてのを見れると面白そうだなと寝ているときに思いつきまして、試しに色々実験しているところです。
サクっとクローラを作って、とりあえず10万URLほど集めてみましたが、自作のASIN抽出コードの精度が微妙に低いことに気が付きました。
ネット上でASIN抽出の正規表現なんかを検索してみましたが、なかなか決定版!といった雰囲気のある記事がなく。というか全体的に情報が古い。
正規表現で一発とはいきませんが、そのなかでも比較的新しく(それでも古め)、きちんと書かれてるっぽいウノウラボのAmazonの商品個別ページのURLからASINを取得するという記事を参考に、JavaScriptで書かれたサンプルをPythonに移植してみました。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | def get_asin_from_url(url): ''' urlからasinを抽出 ''' amazon_r = re. compile (r '^https?://(?:www\.)?amazon\.(?:com|ca|co\.uk|de|co\.jp|jp|fr|cn)/(.+)$' ) amazon = amazon_r.match(url) if not amazon: return None path = amazon.group( 1 ) paths = path.split( '/' ) if paths[ 0 ].lower() = = 'exec' : paths = paths[ 1 :] if len (paths) < = 1 or paths[ 1 ] = = '': return None if paths[ 0 ] in [ 'OBIDOS' , 'obidos' , 'o' ]: if paths[ 1 ].lower() = = 'asin' and len (paths) > = 3 and paths[ 2 ] ! = '': return paths[ 2 ] else : isbn_r = re. compile (r '^isbn(?:=|%3d)(.+)$' ) isbn = isbn_r.match(paths[ 1 ]) if isbn: return isbn.group( 1 ) elif paths[ 1 ].lower() = = 'tg' \ and len (paths) > = 5 \ and paths[ 2 ].lower() = = 'detail' \ and paths[ 3 ] = = '-' : is_asin_r = re. compile (r '^[0-9a-zA-Z]{10}$' ) is_asin = is_asin_r.match(paths[ 4 ]) if is_asin: return paths[ 4 ] elif len (paths) > = 6 and paths[ 5 ] ! = '': return paths[ 5 ] elif paths[ 0 ] = = 'gp' : gp_r = re. compile (r '^gp/product(?:/product-description)?/([0-9a-zA-Z]{10})' ) gp = gp_r.match(path) if gp: return gp.group( 1 ) else : pd_r = re. compile (r '/?dp(?:/product-description)?/([0-9a-zA-Z]{10})' ) pd = pd_r.match(path) if pd: return pd.group( 1 ) return None |
見ての通り、元のJavaScriptのコードをそのまま馬鹿正直にPythonに書き換えた感じになってます。
アルゴリズム的にロバストさはあまりなさげな雰囲気ですが、誤認識がなくなったのでこれでよしとします。
とりあえず被参照回数の降順にAmazonの話題の商品を半手作業で集計してみましたが、みごとにアニメ関連の商品ばかりでした。
個人的にはPC関連商品が見れるとよかったんですが。
クロール開始ページの選定を誤ったかなw
最近のコメント
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
peta_okechan
針金みたいなパーツを引っ張ると外れます。 他の方の…
虎徹ファン交換
虎徹の標準ファンを外す際に、どのようにして外されま…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…