Чи існує API Amazon.com для отримання відгуків про товари?


76

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


привіт Dcrosta: ну, там є деякі плагіни, які це роблять: наприклад. для wordpress ви можете використовувати ScrapeAZon. Я припускаю, що це робить саме те, що ви шукаєте. - просто спробуйте
нуль

Не знаю жодного API, але це може допомогти. jmcauley.ucsd.edu/data/amazon
Rajarshee Mitra

Ви можете використовувати app.feedcheck.co/amazon-review-exporter
Адріан Б

Станом на 2020 рік, яке оновлення щодо цього? Я читаю документацію і не знаходжу додаткової гнучкості в API.
mdabdullah

Відповіді:


36

Оновлення 2:

Будь ласка, перегляньте коментар @ jpillora. Це, мабуть, найдоречніше стосовно оновлення 1 .

Я щойно випробував API реклами продуктів (станом на 17.09.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


7
Я щойно випробував API реклами продуктів (станом на 17.09.2014), здається, цей API повертає лише URL-адресу, що вказує на iframe, що містить лише відгуки. Думаю, вам доведеться зішкребти екран - хоча, я думаю, це порушить TOS Amazon.
jpillora

Станом на 24 липня, коментар @jpillora все ще правильний.
Кори Ді

14

Ось мій короткий прийом - ви можете легко отримати самі відгуки, трохи попрацювавши:

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

9
Я б зауважив, що останні наслідки в законах (маючи на увазі Craiglist тут) означає, що якщо ви робите це без їх дозволу, і вони мають намір заблокувати таких людей, як ви, ви можете порушувати закон, використовуючи цей сценарій
Sammaye

7

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

Ви використовуватимете Вміст реклами продуктів лише ... для надсилання кінцевих користувачів на сайт Amazon і стимулювання продажів.

це означає, що вам заборонено показувати відгуки про товари Amazon, взяті через їх API для продажу продуктів на вашому сайті. Дозволено лише перенаправляти відвідувачів вашого сайту на Amazon і отримувати комісійні комісії.


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

Сподіваюся, це допоможе


3

Як сказано іншими вище, 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




-1

Ви можете використовувати API реклами продуктів Amazon. У ньому є група відповідей "Відгуки", яку ви можете використовувати з операцією "ItemLookup". Вам потрібно знати ASIN, тобто унікальний ідентифікатор товару.

Після встановлення всіх параметрів і запуску підписаної URL-адреси ви отримаєте XML, який містить посилання на відгуки клієнтів під тегом "IFrameURL".

Використовуйте цю URL-адресу та використовуйте пошук за шаблоном у html, що повертається з цієї URL-адреси, для вилучення відгуків. Для кожного огляду в html буде вказаний унікальний ідентифікатор рецензії, і під цим ви зможете отримати всі дані для цього огляду.


1
Ну, саме це він і говорить. Єдиний спосіб отримати відгуки - це iframe, що надзвичайно незручно.
user1029829
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.