1

次のようなリンクがあります。

<div class="zg_title">
  <a href="https://rads.stackoverflow.com/amzn/click/com/B000O3GCFU" rel="nofollow noreferrer">Thermos Foogo Leak-Proof Stainless St...</a>     
</div>

そして、私はそれらを次のようにスクレイピングしています:

  product_asin = product.xpath('//div[@class="zg_title"]/a/@href').first.value 

問題は、URL 全体が必要で、ID だけを取得したいことです。

B000O3GCFU

私はこのようなことをする必要があると思います:

product_asin = product.xpath('//div[@class="zg_title"]/a/@href').first.value[ReGEX_HERE]

この場合に使用できる最も単純な正規表現は何ですか?

編集:

リンク URL が完全に表示されないのは奇妙なことです。

http://www.amazon.com/Thermos-Foogo-Leak-Proof-Stainless-10-Ounce/dp/B000O3GCFU/ref=zg_bs_baby-products_1
4

3 に答える 3

3

製品コードの前後には/dp/常に/:

url[/(?<=\/dp\/)[^\/]+/]

または、おそらくもっと読みやすい:

url[%r{(?<=/dp/)[^/]+}]

または、正規表現を使用せずに:

parts = url.split('/')
parts[parts.index('dp') + 1]
于 2013-08-26T08:18:28.183 に答える
0

利用可能なパーサーに基づくアプローチ (Nicolas Tyler や、この種のケースで正規表現を使用したくない人を喜ばせるため)

require 'uri'

product_uri = product.xpath('//div[@class="zg_title"]/a/@href').first.value
# e.g. http://www.amazon.com/Thermos-Foogo-Leak-Proof-Stainless-10-Ounce/dp/B000O3GCFU/ref=zg_bs_baby-products_1

product_path = URI.parse( product_asin_uri ).path.split('/')
# => ["", "Thermos-Foogo-Leak-Proof-Stainless-10-Ounce", 
#     "dp", "B000O3GCFU", "ref=zg_bs_baby-products_1"]

# This relies on (un-researched assumption) location in path being consistent
# Now we have components though, we can look at Amazon's documentation and 
# select based on position in path, relative position from some other identifier
# etc, without risk of a regex mismatch

product_asin = product_path[2]
# => "B000O3GCFU"
于 2013-08-26T08:24:31.857 に答える