是否有Amazon.com API检索产品评论?
是否有任何AWS API /服务提供对亚马逊销售的产品的产品评论? 我有兴趣查找评论(ASIN,user_id)元组。 我可以看到产品广告API返回一个包含URL的页面的URL(用于embedded到IFRAME中),但是如果可能的话,我对检查数据的机器可读格式感兴趣。
更新2:
请参阅@ jpillora的评论。 更新1可能是最相关的。
我只是尝试了产品广告API(截至2014年9月17日),似乎这个API只返回一个指向只包含评论的iframe的URL。 我想你必须屏幕刮擦 – 虽然我想像会打破亚马逊的服务条款。
更新1:
也许。 我之前写下了原始答案。 我现在没有时间去研究这个问题,因为我不再是一个关注亚马逊评论的项目,而是他们在产品广告API的网页上指出:“产品广告API可以帮助您使用产品search为亚马逊产品做广告,能力,产品信息和function,如客户评论…“截至2011年12月8日。 所以我希望有人看一下,然后回到这里。 随时编辑这个答案。
原版的:
不。
这里是一个间隙的论坛讨论有关的事实,包括理论为什么: http : //forums.digitalpoint.com/showthread.php?t=1932326
如果我错了,请发布你find的东西。 如果可能的话,我有兴趣获得评论内容,并允许向亚马逊提交评论。
你可能想检查这个链接: http : //reviewazon.com/ 。 我只是偶然发现,并没有看到它,但我很惊讶,我没有看到他们的网站上提到有关从亚马逊产品广告API的评论下降更新的任何提及: https://子公司-program.amazon.com/gp/advertising/api/detail/main.html
这是关于这个问题的官方话语:
尊敬的产品广告API开发者,
2010年11月8日,Product Advertising API的评论回复组将不再返回客户评论内容,而是返回Amazon.com上托pipe的客户评论内容的链接。 您将能够使用该链接在您的网站上显示客户评论。 有关更多详细信息,请参阅此处的产品广告API开发者指南。 评论响应组将继续像以前一样运行,直到11月8日,并且现在还可以通过产品广告API获得新的客户评论链接。
这是我的快速接受 – 你可以轻松地检索评论自己多一点工作:
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
根据亚马逊产品广告API许可协议( https://affiliate-program.amazon.com/gp/advertising/api/detail/agreement.html ),特别是4.b.iii:
您将仅使用产品广告内容…向最终用户发送并推动亚马逊网站上的销售。
这意味着您不得在您的网站上向亚马逊产品展示通过其API进行的产品评论。 只允许您的网站访问者redirect到亚马逊,并获得会员佣金。
我会使用像上面的@mfs的答案。 不幸的是,他/她的回答只能用于10条评论,因为这是可以在一页上显示的最大值。
你可以考虑下面的代码:
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
用1433524767(这对三个感兴趣的国家的评论数量有显着不同)运行这个我得到:
>> 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
希望能帮助到你
不幸的是,你只能得到一个与评论的iframeurl,内容本身是不可访问的。
资料来源: http : //docs.amazonwebservices.com/AWSECommerceService/2011-08-01/DG/CHAP_MotivatingCustomerstoBuy.html#GettingCustomerReviews
您可以使用Amazon产品广告API。 它有一个响应组“评论”,您可以使用“ItemLookup”操作。 您需要知道ASIN,即产品的唯一商品标识。
一旦您设置了所有参数并执行签名的URL,您将收到一个XML,其中包含“IFrameURL”标签下的客户评论链接。
使用此URL并使用从此URL返回的HTML中的模式search来提取评论。 对于html中的每一个评论,都会有一个独特的评论编号,在这个编辑框中你可以得到这个评论的所有数据。
正如其他人所说,亚马逊已经停止提供审查其api。 Howevever,我发现这个很好的教程来做与python相同的。 这是他给出的代码,适合我! 他使用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()
在这里,是他的网站评论刮python 2.7的链接