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



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

866   8  

8 ответов:

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

пожалуйста, смотрите комментарий @jpillora. Это, наверное, самое актуальное в отношении обновление 1.

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

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

может быть. Я написал оригинальный ответ ниже ранее. У меня нет времени, чтобы разобраться в этом прямо сейчас, потому что я больше не занимаюсь проектом, связанным с обзорами Amazon, но их веб-страница в API рекламы продукта состояния "API рекламы продукта помогает рекламировать продукты Amazon с помощью функции поиска и поиска продукта, информации о продукте и таких функций, как отзывы клиентов..."как в 2011-12-08. Поэтому я надеюсь, что кто-то посмотрит в него и опубликует вернуться сюда, не стесняйтесь редактировать этот ответ.

Оригинал:

Неа.

вот интересная дискуссия на форуме о факте, включая теории о том, почему: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

вот официальное слово по этому вопросу:

уважаемый разработчик API рекламы продукта,

8 ноября 2010 года, группа реагирования продукта Рекламный API больше не будет возвращать контент отзывов клиентов и вместо этого будет возвращена ссылка на отзывы клиентов контент, размещенный на Amazon.com. вы сможете отображать отзывы клиентов на своем сайте используя эту ссылку. Пожалуйста, обратитесь к разработчику API рекламы продукта руководство найдено здесь для более подробной информации. Группа реагирования на обзоры будет продолжайте функционировать по-прежнему до 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

в соответствии с Лицензионным соглашением Amazon Product Advertising API (https://affiliate-program.amazon.com/gp/advertising/api/detail/agreement.html) и конкретно это пункт 4.б.иии:

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

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

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

надеюсь, что это помогает

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

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

Как уже говорилось выше, 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

вы можете использовать API рекламы продуктов Amazon. Он имеет группу ответов "отзывы", которые вы можете использовать с операцией "ItemLookup". Вы должны знать ASIN т. е. уникальный идентификатор элемента продукта.

после того, как вы установите все параметры и выполните подписанный URL, вы получите XML, который содержит ссылку на отзывы клиентов под тегом "IFrameURL".

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

Comments

    Ничего не найдено.