Esiste un’API Amazon.com per recuperare le recensioni dei prodotti?

Qualcuna delle API / servizi AWS fornisce accesso alle recensioni dei prodotti per gli articoli venduti da Amazon? Sono interessato a cercare recensioni di (ASIN, user_id) tuple. Vedo che l’API Product Advertising restituisce un URL a una pagina (per l’incorporamento in un IFRAME) contenente gli URL, ma sono interessato a un formato leggibile dalla macchina dei dati di revisione, se ansible.

Aggiornamento 2:

Si prega di vedere il commento di @ jpillora. È probabilmente il più pertinente per quanto riguarda l’ aggiornamento 1 .

Ho appena provato l’API di pubblicità del prodotto (a partire dal 2014-09-17), sembra che questa API restituisca solo un URL che punta a un iframe contenente solo le recensioni. Immagino che dovresti scremere lo schermo – anche se immagino che ciò spezzerebbe il TOS di Amazon.

Aggiornamento 1:

Può essere. Ho scritto la risposta originale qui sotto. Non ho tempo di occuparmene ora perché non sono più coinvolto in un progetto relativo alle recensioni di Amazon, ma la loro pagina Web dell’API di pubblicità prodotto afferma “L’API di pubblicità del prodotto ti aiuta a pubblicizzare prodotti Amazon utilizzando la ricerca di prodotti e la ricerca capacità, informazioni sui prodotti e funzionalità come recensioni dei clienti … “dal 2011-12-08. Quindi spero che qualcuno ci guardi e faccia un post qui; sentiti libero di modificare questa risposta.

Originale:

No.

Ecco una discussione forum intersting sul fatto includendo teorie sul perché: http://forums.digitalpoint.com/showthread.php?t=1932326

Se ho torto, per favore pubblica ciò che trovi. Sono interessato a ottenere il contenuto delle recensioni, oltre a consentire l’invio di recensioni ad Amazon, se ansible.

Potresti voler controllare questo link: http://reviewazon.com/ . Mi sono imbattuto in esso e non ci ho fatto caso, ma sono sorpreso di non vedere alcuna menzione sul loro sito riguardo l’aggiornamento relativo alla diminuzione delle recensioni dall’API di Amazon Products Advertising pubblicata su: https: // affiliate -program.amazon.com/gp/advertising/api/detail/main.html

Ecco la parola ufficiale sull’argomento:

Gentile Developer API per la pubblicità del prodotto,

L’8 novembre 2010 il gruppo di risposta Recensioni dell’API per la pubblicità del prodotto non restituirà più il contenuto delle recensioni dei clienti e restituirà invece un collegamento al contenuto delle recensioni dei clienti ospitato su Amazon.com. Sarai in grado di visualizzare le recensioni dei clienti sul tuo sito usando quel link. Per ulteriori dettagli, consultare la guida per gli sviluppatori dell’API di pubblicità del prodotto. Il gruppo di risposta Recensioni continuerà a funzionare come prima fino all’8 novembre e il nuovo collegamento alle recensioni dei clienti è ora disponibile anche tramite l’API di pubblicità del prodotto.

Ecco la mia versione rapida – puoi facilmente recuperare le recensioni con un po ‘più di lavoro:

countries=['com','co.uk','ca','de'] books=[ '''http://www.amazon.%s/Glass-House-Climate-Millennium-ebook/dp/B005U3U69C''', '''http://www.amazon.%s/The-Japanese-Observer-ebook/dp/B0078FMYD6''', '''http://www.amazon.%s/Falling-Through-Water-ebook/dp/B009VJ1622''', ] import urllib2; for book in books: print '-'*40 print book.split('%s/')[1] for country in countries: asin=book.split('/')[-1]; title=book.split('/')[3] url='''http://www.amazon.%s/product-reviews/%s'''%(country,asin) try: f = urllib2.urlopen(url) except: page="" page=f.read().lower(); print '%s=%s'%(country, page.count('member-review')) print '-'*40 

In base all’Accordo di licenza API Amazon Product Advertizing ( https://affiliate-program.amazon.com/gp/advertising/api/detail/agreement.html ) e in particolare al punto 4.b.iii:

Utilizzerai solo i contenuti pubblicitari del prodotto … per inviare gli utenti finali e incentivare le vendite sul sito di Amazon.

il che significa che è vietato mostrare ai prodotti Amazon le recensioni prese tramite la loro API per vendere prodotti sul tuo sito. È consentito solo redirect i visitatori del tuo sito su Amazon e ottenere le commissioni di affiliazione.

Vorrei usare qualcosa come la risposta di @mfs sopra. Sfortunatamente, la sua risposta funzionerà solo per un massimo di 10 recensioni, poiché questo è il massimo che può essere visualizzato su una pagina.

Puoi prendere in considerazione il seguente codice:

 import requests nreviews_re = {'com': re.compile('\d[\d,]+(?= customer review)'), 'co.uk':re.compile('\d[\d,]+(?= customer review)'), 'de': re.compile('\d[\d\.]+(?= Kundenrezens\w\w)')} no_reviews_re = {'com': re.compile('no customer reviews'), 'co.uk':re.compile('no customer reviews'), 'de': re.compile('Noch keine Kundenrezensionen')} def get_number_of_reviews(asin, country='com'): url = 'http://www.amazon.{country}/product-reviews/{asin}'.format(country=country, asin=asin) html = requests.get(url).text try: return int(re.compile('\D').sub('',nreviews_re[country].search(html).group(0))) except: if no_reviews_re[country].search(html): return 0 else: return None # to distinguish from 0, and handle more cases if necessary 

Eseguendo ciò con 1433524767 (che ha un numero significativamente diverso di recensioni per i tre paesi di interesse) ottengo:

 >> print get_number_of_reviews('1433524767', 'com') 3185 >> print get_number_of_reviews('1433524767', 'co.uk') 378 >> print get_number_of_reviews('1433524767', 'de') 16 

Spero che sia d’aiuto

Sfortunatamente puoi ottenere un URL iframe con le recensioni, il contenuto stesso non è accessibile.

Fonte: http://docs.amazonwebservices.com/AWSECommerceService/2011-08-01/DG/CHAP_MotivatingCustomerstoBuy.html#GettingCustomerReviews

Come detto sopra, Amazon ha cessato di fornire recensioni nella sua API. Comunque, ho trovato questo bel tutorial per fare lo stesso con Python. Ecco il codice che dà, funziona per me! Usa python 2.7

 #!/usr/bin/env python # -*- coding: utf-8 -*- # Written as part of https://www.scrapehero.com/how-to-scrape-amazon-product-reviews-using-python/ from lxml import html import json import requests import json,re from dateutil import parser as dateparser from time import sleep def ParseReviews(asin): #This script has only been tested with Amazon.com amazon_url = 'http://www.amazon.com/dp/'+asin # Add some recent user agent to prevent amazon from blocking the request # Find some chrome user agent strings here https://udger.com/resources/ua-list/browser-detail?browser=Chrome headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'} page = requests.get(amazon_url,headers = headers).text parser = html.fromstring(page) XPATH_AGGREGATE = '//span[@id="acrCustomerReviewText"]' XPATH_REVIEW_SECTION = '//div[@id="revMHRL"]/div' XPATH_AGGREGATE_RATING = '//table[@id="histogramTable"]//tr' XPATH_PRODUCT_NAME = '//h1//span[@id="productTitle"]//text()' XPATH_PRODUCT_PRICE = '//span[@id="priceblock_ourprice"]/text()' raw_product_price = parser.xpath(XPATH_PRODUCT_PRICE) product_price = ''.join(raw_product_price).replace(',','') raw_product_name = parser.xpath(XPATH_PRODUCT_NAME) product_name = ''.join(raw_product_name).strip() total_ratings = parser.xpath(XPATH_AGGREGATE_RATING) reviews = parser.xpath(XPATH_REVIEW_SECTION) ratings_dict = {} reviews_list = [] #grabing the rating section in product page for ratings in total_ratings: extracted_rating = ratings.xpath('./td//a//text()') if extracted_rating: rating_key = extracted_rating[0] raw_raing_value = extracted_rating[1] rating_value = raw_raing_value if rating_key: ratings_dict.update({rating_key:rating_value}) #Parsing individual reviews for review in reviews: XPATH_RATING ='./div//div//i//text()' XPATH_REVIEW_HEADER = './div//div//span[contains(@class,"text-bold")]//text()' XPATH_REVIEW_POSTED_DATE = './/a[contains(@href,"/profile/")]/parent::span/following-sibling::span/text()' XPATH_REVIEW_TEXT_1 = './/div//span[@class="MHRHead"]//text()' XPATH_REVIEW_TEXT_2 = './/div//span[@data-action="columnbalancing-showfullreview"]/@data-columnbalancing-showfullreview' XPATH_REVIEW_COMMENTS = './/a[contains(@class,"commentStripe")]/text()' XPATH_AUTHOR = './/a[contains(@href,"/profile/")]/parent::span//text()' XPATH_REVIEW_TEXT_3 = './/div[contains(@id,"dpReviews")]/div/text()' raw_review_author = review.xpath(XPATH_AUTHOR) raw_review_rating = review.xpath(XPATH_RATING) raw_review_header = review.xpath(XPATH_REVIEW_HEADER) raw_review_posted_date = review.xpath(XPATH_REVIEW_POSTED_DATE) raw_review_text1 = review.xpath(XPATH_REVIEW_TEXT_1) raw_review_text2 = review.xpath(XPATH_REVIEW_TEXT_2) raw_review_text3 = review.xpath(XPATH_REVIEW_TEXT_3) author = ' '.join(' '.join(raw_review_author).split()).strip('By') #cleaning data review_rating = ''.join(raw_review_rating).replace('out of 5 stars','') review_header = ' '.join(' '.join(raw_review_header).split()) review_posted_date = dateparser.parse(''.join(raw_review_posted_date)).strftime('%d %b %Y') review_text = ' '.join(' '.join(raw_review_text1).split()) #grabbing hidden comments if present if raw_review_text2: json_loaded_review_data = json.loads(raw_review_text2[0]) json_loaded_review_data_text = json_loaded_review_data['rest'] cleaned_json_loaded_review_data_text = re.sub('<.*?>','',json_loaded_review_data_text) full_review_text = review_text+cleaned_json_loaded_review_data_text else: full_review_text = review_text if not raw_review_text1: full_review_text = ' '.join(' '.join(raw_review_text3).split()) raw_review_comments = review.xpath(XPATH_REVIEW_COMMENTS) review_comments = ''.join(raw_review_comments) review_comments = re.sub('[A-Za-z]','',review_comments).strip() review_dict = { 'review_comment_count':review_comments, 'review_text':full_review_text, 'review_posted_date':review_posted_date, 'review_header':review_header, 'review_rating':review_rating, 'review_author':author } reviews_list.append(review_dict) data = { 'ratings':ratings_dict, 'reviews':reviews_list, 'url':amazon_url, 'price':product_price, 'name':product_name } return data def ReadAsin(): #Add your own ASINs here AsinList = ['B01ETPUQ6E','B017HW9DEW'] extracted_data = [] for asin in AsinList: print "Downloading and processing page http://www.amazon.com/dp/"+asin extracted_data.append(ParseReviews(asin)) sleep(5) f=open('data.json','w') json.dump(extracted_data,f,indent=4) if __name__ == '__main__': ReadAsin() 

Ecco, il link al suo sito web recensisce le recensioni con python 2.7

Puoi utilizzare l’API di Amazon Product Advertising. Dispone di un gruppo di risposte ‘Recensioni’ che è ansible utilizzare con l’operazione ‘ItemLookup’. È necessario conoscere ASIN, ovvero l’ID object univoco del prodotto.

Una volta impostati tutti i parametri ed eseguito l’URL firmato, riceverai un XML che contiene un link alle recensioni dei clienti sotto il tag “IFrameURL”.

Utilizza questo URL e utilizza la ricerca di modelli in html restituito da questo URL per estrarre le recensioni. Per ogni recensione in html, ci sarà un id di revisione univoco e sotto questo è ansible ottenere tutti i dati per quella recensione particolare.