Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

scrape ASIN from amazon URL using javascript

Assuming I have an Amazon product URL like so

http://www.amazon.com/Kindle-Wireless-Reading-Display-Generation/dp/B0015T963C/ref=amb_link_86123711_2?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-1&pf_rd_r=0AY9N5GXRYHCADJP5P0V&pf_rd_t=101&pf_rd_p=500528151&pf_rd_i=507846

How could I scrape just the ASIN using javascript? Thanks!

like image 287
rashcroft22 Avatar asked Nov 19 '09 16:11

rashcroft22


4 Answers

Amazon's detail pages can have several forms, so to be thorough you should check for them all. These are all equivalent:

http://www.amazon.com/Kindle-Wireless-Reading-Display-Generation/dp/B0015T963C
http://www.amazon.com/dp/B0015T963C
http://www.amazon.com/gp/product/B0015T963C
http://www.amazon.com/gp/product/glance/B0015T963C

They always look like either this or this:

http://www.amazon.com/<SEO STRING>/dp/<VIEW>/ASIN
http://www.amazon.com/gp/product/<VIEW>/ASIN

This should do it:

var url = "http://www.amazon.com/Kindle-Wireless-Reading-Display-Generation/dp/B0015T963C";
var regex = RegExp("http://www.amazon.com/([\\w-]+/)?(dp|gp/product)/(\\w+/)?(\\w{10})");
m = url.match(regex);
if (m) { 
    alert("ASIN=" + m[4]);
}
like image 147
jpsimons Avatar answered Oct 18 '22 18:10

jpsimons


Since the ASIN is always a sequence of 10 letters and/or numbers immediately after a slash, try this:

url.match("/([a-zA-Z0-9]{10})(?:[/?]|$)")

The additional (?:[/?]|$) after the ASIN is to ensure that only a full path segment is taken.

like image 31
Gumbo Avatar answered Oct 18 '22 18:10

Gumbo


Actually, the top answer doesn't work if it's something like amazon.com/BlackBerry... (since BlackBerry is also 10 characters).

One workaround (assuming the ASIN is always capitalized, as it always is when taken from Amazon) is (in Ruby):

        url.match("/([A-Z0-9]{10})")

I've found it to work on thousands of URLs.

like image 10
osman Avatar answered Oct 18 '22 18:10

osman


None of the above work in all cases. I have tried following urls to match with the examples above:

http://www.amazon.com/Kindle-Wireless-Reading-Display-Generation/dp/B0015T963C
http://www.amazon.com/dp/B0015T963C
http://www.amazon.com/gp/product/B0015T963C
http://www.amazon.com/gp/product/glance/B0015T963C

https://www.amazon.de/gp/product/B00LGAQ7NW/ref=s9u_simh_gw_i1?ie=UTF8&pd_rd_i=B00LGAQ7NW&pd_rd_r=5GP2JGPPBAXXP8935Q61&pd_rd_w=gzhaa&pd_rd_wg=HBg7f&pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=&pf_rd_r=GA7GB6X6K6WMJC6WQ9RB&pf_rd_t=36701&pf_rd_p=c210947d-c955-4398-98aa-d1dc27e614f1&pf_rd_i=desktop

https://www.amazon.de/Sawyer-Wasserfilter-Wasseraufbereitung-Outdoor-Filter/dp/B00FA2RLX2/ref=pd_sim_200_3?_encoding=UTF8&psc=1&refRID=NMR7SMXJAKC4B3MH0HTN

https://www.amazon.de/Notverpflegung-Kg-Marine-wasserdicht-verpackt/dp/B01DFJTYSQ/ref=pd_sim_200_5?_encoding=UTF8&psc=1&refRID=7QM8MPC16XYBAZMJNMA4

https://www.amazon.de/dp/B01N32MQOA?psc=1

This is the best I could come up with: (?:[/dp/]|$)([A-Z0-9]{10}) Which will also select the prepending / in all cases. This can then be removed later on.

You can test it on: http://regexr.com/3gk2s

like image 6
Chalkin Avatar answered Oct 18 '22 18:10

Chalkin