Есть ли API Amazon.com для получения обзоров продуктов?

Предоставляет ли какой-либо из API / сервисов AWS доступ к обзорам продуктов, продаваемых Amazon? Мне интересно искать отзывы по кортежу (ASIN, user_id). Я вижу, что Product Advertising API возвращает URL-адрес страницы (для встраивания в IFRAME), содержащей URL-адреса, но меня интересует машиночитаемый формат данных обзора, если это возможно.


person dcrosta    schedule 26.01.2011    source источник
comment
привет, Dcrosta: ну, есть несколько плагинов, которые это делают: например. для wordpress вы можете использовать ScrapeAZon. Я предполагаю, что он делает именно то, что вы ищете. - просто попробуйте   -  person zero    schedule 18.09.2014
comment
Не знаю ни одного API, но это может помочь. jmcauley.ucsd.edu/data/amazon   -  person Rajarshee Mitra    schedule 20.12.2015
comment
Вы можете использовать app.feedcheck.co/amazon-review-exporter.   -  person Adrian B    schedule 20.12.2016
comment
Что нового по этому поводу по состоянию на 2020 год? Я прочитал документацию и не нахожу дополнительной гибкости в API.   -  person mdabdullah    schedule 19.01.2020


Ответы (8)


Обновление 2:

См. Комментарий @ jpillora. Вероятно, это наиболее актуально для Обновления 1.

Я только что попробовал Product Advertising API (по состоянию на 17 сентября 2014 г.), кажется, что этот API возвращает только URL-адрес, указывающий на iframe, содержащий только обзоры. Я думаю, вам придется очистить экран - хотя я полагаю, что это нарушит TOS Amazon.

Обновление 1:

Может быть. Я написал оригинальный ответ ниже ранее. У меня нет времени разбираться в этом прямо сейчас, потому что я больше не участвую в проекте, посвященном обзорам Amazon, а их веб-страница по адресу Product Advertising API говорится:« Product Advertising API помогает вам рекламировать товары Amazon с помощью поиска и поиска товаров, информации о товарах и таких функций, как отзывы клиентов. .. »по состоянию на 08.12.2011. Так что я надеюсь, что кто-то изучит это и напишет здесь; не стесняйтесь редактировать этот ответ.

Исходный:

Неа.

Вот интересное обсуждение этого факта на форуме, включая теории о том, почему: http://forums.digitalpoint.com/showthread.php?t=1932326

Если я ошибаюсь, опубликуйте, что вы нашли. Я заинтересован в получении контента обзоров, а также в разрешении отправки отзывов в Amazon, если это возможно.

Вы можете проверить эту ссылку: http://reviewazon.com/. Я просто наткнулся на это и не изучал, но я удивлен, что не вижу упоминания на их сайте об обновлении, касающемся падения отзывов из API рекламы продуктов Amazon, размещенных по адресу: https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html

person Tyler Collier    schedule 28.01.2011
comment
Я только что попробовал Product Advertising API (по состоянию на 17 сентября 2014 г.), кажется, что этот API возвращает только URL-адрес, указывающий на iframe, содержащий только обзоры. Я думаю, вам придется очистить экран - хотя я полагаю, что это нарушит TOS Amazon. - person jpillora; 17.09.2014
comment
По состоянию на 24 июля 15 комментарий @jpillora все еще верен. - person Cory Dee; 24.07.2015
comment
На момент написания этой статьи URL-адрес reviewazon.com больше не активен. Обзор AZON в настоящее время закрыт для новых клиентов - person Raleigh L.; 21.03.2021

Вот мой быстрый взгляд на это - вы легко можете получить сами отзывы, приложив немного больше усилий:

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
person mfs    schedule 07.01.2013
comment
Я хотел бы отметить, что недавние эффекты в законах (здесь имеется в виду Craiglist) означает, что если вы сделаете это без их разрешения, и они намереваются заблокировать таких людей, как вы, то вы можете нарушить закон, используя этот скрипт. - person Sammaye; 21.08.2013

Согласно лицензионному соглашению API рекламы продуктов Amazon (https://affiliate-program.amazon.com/gp/advertising/api/detail/agreement.html) и, в частности, это пункт 4.b.iii:

Вы будете использовать Контент рекламы продукта только ... для отправки конечных пользователей на сайт Amazon и увеличения продаж на нем.

Это означает, что вам запрещено показывать обзоры продуктов Amazon, полученные через их API, для продажи продуктов на вашем сайте. Разрешено только перенаправлять посетителей вашего сайта на Amazon и получать партнерские комиссии.

person user2660784    schedule 07.08.2013

Я бы использовал что-то вроде ответа @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

Надеюсь, это поможет

person thorwhalen    schedule 24.02.2014

Как было сказано выше, Amazon прекратил предоставлять обзоры в своем 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()

Вот ссылка на его веб-сайт. обзор обзоров с помощью python 2.7

person Chandan Purohit    schedule 12.01.2017

К сожалению, вы можете получить только URL-адрес iframe с отзывами, сам контент недоступен.

Источник: http://docs.amazonwebservices.com/AWSECommerceService/2011-08-01/DG/CHAP_MotivatingCustomerstoBuy.html#GettingCustomerReviews

person gphilip    schedule 08.12.2012

Инструменты мониторинга обзоров предлагают сторонние API. Одним из них является Review Monitoring API FeedCheck.

person Adrian B    schedule 07.05.2020

Вы можете использовать Amazon Product Advertising API. У него есть группа ответа «Обзоры», которую вы можете использовать с операцией «ItemLookup». Вам необходимо знать ASIN, т.е. уникальный идентификатор товара.

После установки всех параметров и выполнения подписанного URL-адреса вы получите XML-код, содержащий ссылку на отзывы клиентов в теге «IFrameURL».

Используйте этот URL-адрес и используйте поиск по шаблону в html, возвращенный с этого URL-адреса, для извлечения отзывов. Для каждого обзора в html будет уникальный идентификатор обзора, под которым вы можете получить все данные для этого конкретного обзора.

person DataMiningEnthusiast    schedule 02.06.2015
comment
Что ж, это именно то, что он говорит. Получить отзывы можно только через iframe, что крайне неудобно. - person user1029829; 25.03.2018