【问题标题】:Is there an Amazon.com API to retrieve product reviews? [closed]是否有 Amazon.com API 来检索产品评论? [关闭]
【发布时间】:2011-01-26 23:17:46
【问题描述】:

是否有任何 AWS API/服务提供对亚马逊销售商品的产品评论的访问权限?我有兴趣按 (ASIN, user_id) 元组查找评论。我可以看到产品广告 API 返回包含 URL 的页面(用于嵌入 IFRAME)的 URL,但如果可能的话,我对评论数据的机器可读格式感兴趣。

【问题讨论】:

  • 嗨 Dcrosta:好吧,有一些插件可以做到这一点:例如。对于 wordpress,您可以使用 ScrapeAZon。我想它完全符合您的要求。 - 试一试
  • 不知道任何 API,但这可能会有所帮助。 jmcauley.ucsd.edu/data/amazon
  • 截至 2020 年,这方面的更新是什么?我阅读了文档,并没有发现 API 增加了灵活性。

标签: amazon-web-services


【解决方案1】:

更新 2:

请参阅@jpilora 的评论。它可能与 Update 1 最相关。

我刚刚试用了产品广告 API(截至 2014 年 9 月 17 日),似乎这个 API 只返回一个指向仅包含评论的 iframe 的 URL。我想你必须屏蔽抓取——尽管我想这会破坏亚马逊的 TOS。

更新 1:

也许吧。我之前在下面写了原始答案。我现在没有时间研究这个,因为我不再参与与亚马逊评论有关的项目,但他们的网页 Product Advertising API 声明“产品广告 API 帮助您使用产品搜索和查找来宣传亚马逊产品能力、产品信息和客户评论等功能......”截至 2011 年 12 月 8 日。所以我希望有人调查一下并在这里发帖;随时编辑此答案。

原文:

没有。

这是一个有趣的论坛讨论,包括关于原因的理论:http://forums.digitalpoint.com/showthread.php?t=1932326

如果我错了,请发布您发现的内容。如果可能的话,我有兴趣获取评论内容,以及允许向亚马逊提交评论。

您可能需要查看此链接:http://reviewazon.com/。我只是偶然发现它并没有调查它,但我很惊讶我在他们的网站上没有看到任何关于亚马逊产品广告 API 评论下降的更新发布在:https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html

【讨论】:

  • 我刚刚试用了产品广告 API(截至 2014 年 9 月 17 日),该 API 似乎只返回一个指向仅包含评论的 iframe 的 URL。我想你必须屏蔽刮擦——尽管我想这会破坏亚马逊的 TOS。
  • 截至 2015 年 7 月 24 日,@jpillora 的评论仍然正确。
  • 截至撰写本文时,reviewazon.com URL 不再有效。 “ReviewAZON 目前不对新客户开放”
【解决方案2】:

这是我对它的快速了解 - 您可以通过更多工作轻松检索评论:

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

【讨论】:

  • 我会注意到法律最近的影响(在这里想到 craiglist)意味着如果您在未经他们许可的情况下这样做并且他们打算阻止像您这样的人,那么您可能会因为使用此脚本而触犯法律
【解决方案3】:

根据亚马逊产品广告 API 许可协议 (https://affiliate-program.amazon.com/gp/advertising/api/detail/agreement.html),特别是第 4.b.iii 点:

您将仅使用产品广告内容...将最终用户引导至亚马逊网站并推动其销售。

这意味着禁止您展示通过其 API 获取的亚马逊产品评论以在您的网站上销售产品。它只允许将您的网站访问者重定向到亚马逊并获得会员佣金。

【讨论】:

    【解决方案4】:

    我会使用类似于上面@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
    

    希望对你有帮助

    【讨论】:

      【解决方案5】:

      正如上面其他人所说,亚马逊已停止在其 api 中提供评论。但是,我发现这个不错的教程可以用 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()
      

      这里是他网站的链接reviews scraping with python 2.7

      【讨论】:

        【解决方案6】:

        很遗憾,您只能获得带有评论的 iframe URL,内容本身无法访问。

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

        【讨论】:

          【解决方案7】:

          结帐 RapidAPI:https://rapidapi.com/blog/amazon-product-reviews-api/ 通过使用此 API,我们可以获得亚马逊产品评论。

          【讨论】:

          【解决方案8】:

          您可以使用亚马逊产品广告 API。它有一个响应组“评论”,您可以将其与操作“ItemLookup”一起使用。您需要知道 ASIN,即产品的唯一商品 ID。

          设置所有参数并执行签名 URL 后,您将收到一个 XML,其中包含指向“IFrameURL”标签下的客户评论的链接。

          使用此 URL 并使用从该 URL 返回的 html 中的模式搜索来提取评论。对于 html 中的每条评论,都会有一个唯一的评论 ID,您可以在该 ID 下获取该特定评论的所有数据。

          【讨论】:

          • 嗯,这正是他所说的。获得评论的唯一方法是通过 iframe,这非常不方便。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-22
          • 1970-01-01
          • 1970-01-01
          • 2022-01-21
          • 2013-12-28
          • 2023-03-03
          相关资源
          最近更新 更多