投稿日
2010/11/29 月曜日
この前書いたAmazonの商品個別ページのURLからASINを取得するというエントリに載せた、ウノウのアレを移植した関数で色々試してみてたところ、なんか思ったよりもASINを抽出出来る割合が少ないというか取りこぼしが多いんじゃないかという気がしたため、真面目に自力で作ってみました。(正直汚ねぇコードだなーとも思ってたし。)
処理内容は、amazonのurlかチェックして、もしそうならasinを含むかどうかチェックするという感じです。
def get_asin_from_url(url):
'''urlからasinを抽出'''
url = url.lower()
amazon_r = re.compile(r'^https?://(?:[^.]+\.)?(?:images-)?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)
pattern = '''
(?: # 以下のパターンのいずれかから始まり(一応URLエンコードした値も併記)
/asin/| %2fasin%2f|
&asins?=| %26asins?%3d|
=asin/| %3dasin%2f|
&a=| %26a%3d|
/dp/| %2fdp%2f|
/dp/accessories/| %2fdp%2faccessories%2f|
/dp/artist-redirect/| %2fdp%2fartist-redirect%2f|
/dp/product-details/| %2fdp%2fproduct-details%2f|
/dp/samples/| %2fdp%2fsamples%2f|
/exec/obidos/isbn/| %2fexec%2fobidos%2fisbn%2f|
/gp/offer-listing/| %2fgp%2foffer-listing%2f|
/gp/product/| %2fgp%2fproduct%2f|
/gp/product/images/| %2fgp%2fproduct%2fimages%2f|
/gp/product/product-description/| %2fgp%2fproduct%2fproduct-description%2f|
/gp/product/toc/| %2fgp%2fproduct%2ftoc%2f|
/images/p/| %2fimages%2fp%2f|
/product-reviews/| %2fproduct-reviews%2f|
/sim/| %2fsim%2f # 最後は縦棒を付けない!
)
([0-9a-z]{10}) # The ASIN!
(?: # 以下のパターンのいずれかで終わる
/|
\?|
&|
\.|
%|
$
)
'''
asin_r = re.compile(pattern, re.VERBOSE)
asin = asin_r.search(path)
if asin:
return asin.group(1).upper()
else:
return None
でまぁ、テストデータとしてasinを含むかどうかに限らず様々なパターンのamazonのurlを約18,000件ぐらい用意しまして、今回の関数と前回の関数にかけてみました。
今回の関数だと、約18,000件中約16,000件からasinを抽出出来ました。
もちろんテストケースと目視でざっと確認したところ、おかしい点は見当たりませんでした。(取りこぼしや、asinじゃないものを誤認識する事は無いようでした。)
もちろん精度100%ではないと思いますが。
一方、前回の関数だと、約18,000件中約7,000件しかasinを抽出出来ませんでした。
ダメっすね。ウノ…ゲフンゲフン
最近のコメント
たかたむ
はじめまして。初リアルフォース(R3ですが)で,同…
nokiyameego
ZFS poolのデバイスラベル破損で悩んていたと…
名前
しゅごい
Jane Doe
FYI Avoid Annoying Unexpe…
Jane Doe
ご存じとは思いますが、whileには、”~の間”と…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…
花粉症対策2019 – 日曜研究室
[…] 花粉症対策についてはこれまで次の記事を書いてきました。https://…