Как скрапить отзывы Amazon с помощью Python в 2025 году

Последнее обновление: August 21, 2026
Как скрапить отзывы Amazon с помощью Python в 2025 году

Мой скрапер отзывов Amazon отлично работал шесть недель — а потом однажды утром он вернул 200 OK и пустую страницу. Ни ошибки, ни CAPTCHA, просто пустой HTML там, где раньше были сотни отзывов.

Если это звучит знакомо, вы не одиноки. В конце 2025 года Amazon начал прятать полные страницы отзывов за экраном входа, и огромное количество Python-скриптов для парсинга перестало работать буквально за ночь. Последние несколько месяцев я провёл в Thunderbit, разбирая эту проблему с двух сторон — создавая наш AI веб скрапер и одновременно поддерживая собственный Python-пайплайн для отзывов. Поэтому я решил написать тот самый гайд, которого мне самому не хватало, когда мой скрипт впервые «умер».

В этой статье я покажу рабочий подход: вход по cookies, стабильные селекторы, которые переживают CSS-обфускацию Amazon, обход лимита пагинации в 10 страниц, защиту от антибот-систем и бонусный раздел по анализу тональности, который превращает сырые отзывы в реальные бизнес-инсайты. А если по ходу вы подумаете: «Лучше бы я не поддерживал весь этот код», — я покажу, как Thunderbit делает то же самое примерно за две минуты и вообще без Python.

Что такое скрапинг отзывов Amazon и зачем он нужен?

Скрапинг отзывов Amazon — это программное извлечение данных из пользовательских отзывов: рейтинга в звёздах, текста отзыва, имени автора, даты, отметки о подтверждённой покупке и других полей со страниц товаров Amazon. Поскольку Amazon убрал отзывы из Product Advertising API ещё в 2010 году и так их и не вернул, веб-скрапинг остаётся единственным программным способом получить эти данные.

Цифры это подтверждают. 95% покупателей читают отзывы перед покупкой, а 94% называют Amazon своим главным источником отзывов о товарах. Показ всего 5 отзывов на странице товара может увеличить конверсию на 270%. Компании, которые системно анализируют тональность отзывов, видят до 15% более высокий уровень удержания клиентов. Это не абстрактная дата-сайенс-история — это конкурентная разведка, сигналы для улучшения продукта и маркетинговый язык, который лежит прямо в текстах на серверах Amazon.

Зачем скрапить отзывы Amazon с помощью Python

Python по-прежнему остаётся основным инструментом для этой задачи. Это самый желанный язык в опросе Stack Overflow Developer Survey 2024, а его экосистема — requests, BeautifulSoup, pandas, Scrapy — делает веб-скрапинг доступным даже тем, кто не работает разработчиком на полной ставке.

Разные команды используют эти данные по-разному:

КомандаСценарий использованияЧто извлекают
Продукт / R&DНаходят повторяющиеся жалобы, приоритизируют исправленияТекст отзывов с 1–2 звёздами, частотность ключевых слов
ПродажиОтслеживают тональность товаров конкурентовРейтинги, динамика объёма отзывов
МаркетингБерут язык клиентов для рекламных текстовПозитивные формулировки из отзывов, упоминания функций
Ecommerce OpsСледят за изменением тональности собственного товараРаспределение по звёздам, доля подтверждённых покупок
Исследование рынкаСравнивают лидеров категории по функциямНаборы отзывов по нескольким ASIN

Один бренд кухонной утвари проанализировал негативные отзывы и обнаружил, что 22% жалоб связаны с тем, что "антипригарное покрытие стирается", переработал продукт и вернул себе первую позицию Best Seller за 60 дней. Компания, выпускающая фитнес-трекеры, выявила в текстах отзывов проблему "раздражения ремешка", обнаружила связь с аллергией на латекс, выпустила гипоаллергенную версию и сократила возвраты на 40%. Вот ради такого ROI и стоит заниматься этой инженерной работой.

Экран входа: почему ваш скрапер отзывов Amazon перестал работать

14 ноября 2024 года Amazon начал требовать авторизацию для просмотра полной страницы отзывов о товаре. Это подтверждалось в сообществах пользователей и блогах сервисов для скрапинга. Если открыть /product-reviews/{ASIN}/ в режиме инкогнито, вас перенаправит на страницу входа, а не на отзывы.

python-web-scraping-diagram.webp

Симптомы тонкие: ваш скрипт получает ответ 200 OK, но в теле HTML вместо отзывов лежит форма входа (name="email", id="ap_password"). Никакой ошибки. Никакой CAPTCHA. Просто... ничего полезного.

Amazon сделал это из соображений антибот-защиты и регионального соответствия требованиям. Принудительная проверка работает не всегда одинаково — иногда свежий браузер успевает показать несколько отзывов до срабатывания блока, особенно на первой странице — но для любого скрапера на масштабе стоит считать, что экран входа включён всегда.

Разные региональные домены Amazon (.de, .co.uk, .co.jp) применяют эту защиту отдельно. Как написал один участник форума: «для каждой страны нужен отдельный логин». Ваши cookies с .com не подойдут для .co.uk.

Featured Reviews vs. полные отзывы: что можно получить без логина

На страницах товара Amazon (/dp/{ASIN}/) по-прежнему отображается примерно 8 "featured reviews" без авторизации. Это отзывы, которые Amazon отобрал алгоритмически. Они полезны для быстрого просмотра тональности, но их нельзя сортировать, фильтровать или листать страницами.

Полные страницы отзывов (/product-reviews/{ASIN}/) — с сортировкой по новизне, фильтром по звёздам и пагинацией на сотни отзывов — уже требуют входа.

Если вам нужно всего несколько отзывов для быстрого «пульса», можно скрапить страницу товара. Если нужны сотни или тысячи — придётся работать с авторизацией.

Что нужно до старта: Python и библиотеки

Прежде чем писать код, вот базовая подготовка:

  • Сложность: средняя (уверенное владение Python, базовое понимание HTML)
  • Время: около 45 минут на полный пайплайн; около 10 минут на простой скрапинг
  • Что понадобится: Python 3.8+, браузер Chrome, действующий аккаунт Amazon

Установите основные библиотеки:

pip install requests beautifulsoup4 lxml pandas textblob

Опционально (для продвинутого анализа тональности):

pip install transformers torch

Что такое ASIN? Это 10-символьный идентификатор товара Amazon. Вы найдёте его в любом URL товара — например, в amazon.com/dp/B0BCNKKZ91 ASIN будет B0BCNKKZ91. Именно его вы подставите в URL страницы отзывов.

Шаг 1: Обойти экран входа с помощью авторизации через cookies

Самый надёжный способ — войти в Amazon в браузере, скопировать cookies сессии и подставить их в requests.Session() в Python. Так вы избегаете CAPTCHA и SMS-2FA, которые часто ломают автоматический логин через Selenium.

Вам понадобятся эти семь cookies:

Имя cookieНазначение
session-idПлавающий идентификатор сессии
session-id-timeВременная метка сессии
session-tokenПлавающий токен сессии
ubid-mainИдентификатор браузерной активности пользователя
at-mainОсновной auth-токен
sess-at-mainAuth в рамках сессии
x-mainИдентификатор, привязанный к email пользователя

Как извлечь cookies через Chrome DevTools

  1. Войдите в amazon.com в Chrome
  2. Откройте DevTools (F12 или правый клик → Inspect)
  3. Перейдите в ApplicationStorageCookieshttps://www.amazon.com
  4. Найдите каждое имя cookie из таблицы и скопируйте значение
  5. Соберите их в строку, разделённую ;, для Python

Настройте сессию вот так:

import requests

session = requests.Session()

# Вставьте значения cookie сюда
cookies = {
    "session-id": "YOUR_SESSION_ID",
    "session-id-time": "YOUR_SESSION_ID_TIME",
    "session-token": "YOUR_SESSION_TOKEN",
    "ubid-main": "YOUR_UBID_MAIN",
    "at-main": "YOUR_AT_MAIN",
    "sess-at-main": "YOUR_SESS_AT_MAIN",
    "x-main": "YOUR_X_MAIN",
}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.5",
}

session.cookies.update(cookies)
session.headers.update(headers)

Важно: используйте один и тот же объект session для всех запросов. Так cookies остаются согласованными, а поведение больше похоже на реальный браузер. Обычно cookies живут от нескольких дней до нескольких недель даже при скрапинге, но если снова начались редиректы на логин — просто обновите их из браузера.

Для маркетплейсов не .com имена cookies немного отличаются — у amazon.de используется at-acbde вместо at-main, у amazon.co.uk — at-acbuk и так далее. Для каждой площадки нужна отдельная сессия.

Шаг 2: Собираем запрос и парсим HTML отзывов через BeautifulSoup

URL отзывов Amazon выглядит так:

https://www.amazon.com/product-reviews/{ASIN}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1

Основная функция:

from bs4 import BeautifulSoup
import time, random

def get_soup(session, url):
    time.sleep(random.uniform(2, 5))  # Вежливая пауза
    response = session.get(url, timeout=15)

    # Детектируем экран входа
    if "ap_email" in response.text or "Amazon Sign-In" in response.text:
        raise Exception("Обнаружен экран входа — обновите cookies")

    if response.status_code != 200:
        raise Exception(f"HTTP {response.status_code}")

    return BeautifulSoup(response.text, "lxml")

Есть простой приём, который помогает: перед страницей отзывов сначала откройте страницу товара. Это создаёт более естественный паттерн поведения для сессии.

# Сначала открываем страницу товара (как обычный браузинг)
product_url = f"https://www.amazon.com/dp/{asin}"
session.get(product_url, timeout=15)
time.sleep(random.uniform(1, 3))

# Затем идём на страницу отзывов
reviews_url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1"
soup = get_soup(session, reviews_url)

Шаг 3: Используйте стабильные селекторы для извлечения данных из отзывов (не полагайтесь на CSS-классы)

Именно здесь ломается большинство туториалов 2022–2023 годов. Amazon обфусцирует названия CSS-классов — они периодически меняются, и, как один раздражённый разработчик написал на форуме: «ни у одного из них не было общего шаблона в названиях классов у span-тегов».

Решение: в элементах отзывов Amazon использует атрибуты data-hook, и они удивительно стабильны. Это семантические идентификаторы, на которые опирается фронтенд Amazon, поэтому их не рандомизируют.

Поле отзываСтабильный селектор (data-hook)Хрупкий селектор (class)
Текст отзыва[data-hook="review-body"].review-text-content (меняется)
Рейтинг в звёздах[data-hook="review-star-rating"].a-icon-alt (неоднозначный)
Заголовок отзыва[data-hook="review-title"].review-title (иногда)
Имя автораspan.a-profile-nameОтносительно стабилен
Дата отзыва[data-hook="review-date"].review-date (зависит от региона)
Подтверждённая покупка[data-hook="avp-badge"]span.a-size-mini

Код извлечения с помощью селекторов data-hook:

import re

def extract_reviews(soup):
    reviews = []
    review_divs = soup.select('[data-hook="review"]')

    for div in review_divs:
        # Рейтинг в звёздах
        rating_el = div.select_one('[data-hook="review-star-rating"]')
        rating = None
        if rating_el:
            rating_text = rating_el.get_text(strip=True)
            match = re.search(r'(\d\.?\d?)', rating_text)
            if match:
                rating = float(match.group(1))

        # Заголовок
        title_el = div.select_one('[data-hook="review-title"]')
        title = title_el.get_text(strip=True) if title_el else ""

        # Текст
        body_el = div.select_one('[data-hook="review-body"]')
        body = body_el.get_text(strip=True) if body_el else ""

        # Автор
        author_el = div.select_one('span.a-profile-name')
        author = author_el.get_text(strip=True) if author_el else ""

        # Дата и страна
        date_el = div.select_one('[data-hook="review-date"]')
        date_text = date_el.get_text(strip=True) if date_el else ""
        # Формат: "Reviewed in the United States on January 15, 2025"
        country_match = re.search(r'Reviewed in (.+?) on', date_text)
        date_match = re.search(r'on (.+)$', date_text)
        country = country_match.group(1) if country_match else ""
        date = date_match.group(1) if date_match else ""

        # Подтверждённая покупка
        verified_el = div.select_one('[data-hook="avp-badge"]')
        verified = bool(verified_el)

        reviews.append({
            "author": author,
            "rating": rating,
            "title": title,
            "content": body,
            "date": date,
            "country": country,
            "verified": verified,
        })

    return reviews

Я уже несколько месяцев запускаю этот набор селекторов на разных ASIN, и атрибуты data-hook ни разу не менялись. А вот CSS-классы за тот же период менялись как минимум дважды.

Шаг 4: Пагинация и лимит Amazon на 10 страниц

Amazon ограничивает параметр pageNumber десятью страницами по 10 отзывов на каждой — это жёсткий потолок примерно в 100 отзывов на одну комбинацию фильтров. Кнопка «Next page» просто исчезает после 10-й страницы.

Базовый цикл пагинации:

all_reviews = []

for page in range(1, 11):
    url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber={page}"
    soup = get_soup(session, url)
    page_reviews = extract_reviews(soup)

    if not page_reviews:
        break  # На этой странице больше нет отзывов

    all_reviews.extend(page_reviews)
    print(f"Страница {page}: {len(page_reviews)} отзывов")

Как получить больше 10 страниц отзывов Amazon

Обходной путь — разбиение по фильтрам. Каждая комбинация filterByStar и sortBy получает своё независимое окно в 10 страниц.

Значения звёздных фильтров: one_star, two_star, three_star, four_star, five_star
Значения сортировки: recent, helpful (по умолчанию)

Если объединить все 5 фильтров по звёздам × 2 варианта сортировки, можно получить до 100 страниц, то есть до 1 000 отзывов на товар — а для товаров с неравномерным распределением оценок часто удаётся приблизиться почти к полному набору.

star_filters = ["one_star", "two_star", "three_star", "four_star", "five_star"]
sort_orders = ["recent", "helpful"]
all_reviews = []
seen_titles = set()  # Простая дедупликация

for star in star_filters:
    for sort in sort_orders:
        for page in range(1, 11):
            url = (
                f"https://www.amazon.com/product-reviews/{asin}"
                f"?filterByStar={star}&sortBy={sort}&pageNumber={page}"
            )
            soup = get_soup(session, url)
            page_reviews = extract_reviews(soup)

            if not page_reviews:
                break

            for review in page_reviews:
                # Убираем дубликаты по связке заголовок + автор
                key = (review["title"], review["author"])
                if key not in seen_titles:
                    seen_titles.add(key)
                    all_reviews.append(review)

            print(f"[{star}/{sort}] Страница {page}: {len(page_reviews)} отзывов")

print(f"Всего уникальных отзывов: {len(all_reviews)}")

Пересечения между блоками неизбежны, поэтому дедупликация обязательна. Я обычно использую комбинацию заголовка отзыва и имени автора как быстрый ключ — не идеально, но так отсекается подавляющее большинство дублей.

Шаг 5: Обходите антибот-защиту (ротация, троттлинг, повторные попытки)

Amazon использует AWS WAF Bot Control, и он стал заметно агрессивнее. Однослойные меры защиты — просто менять User-Agent или просто добавлять задержки — уже не спасают.

ТехникаРеализация
Ротация User-AgentСлучайный выбор из 10+ реальных строк браузеров
Экспоненциальный backoffЗадержки повторов 2с → 4с → 8с при 503
Троттлинг запросовrandom.uniform(2, 5) секунд между страницами
Ротация проксиЦиклический обход residential-прокси
Отпечаток сессииСогласованные cookies + headers для одной сессии
TLS-имперсонацияИспользуйте curl_cffi вместо стандартного requests в продакшене

Готовая к продакшену обёртка с повторами:

import time, random

USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
]

def scrape_with_retries(session, url, max_retries=3):
    for attempt in range(max_retries):
        try:
            session.headers["User-Agent"] = random.choice(USER_AGENTS)
            time.sleep(random.uniform(2, 5))

            response = session.get(url, timeout=15)

            # Детектируем блокировки
            if "validateCaptcha" in response.url or "Robot Check" in response.text:
                wait = (2 ** attempt) * 5
                print(f"Обнаружена CAPTCHA. Ждём {wait}с...")
                time.sleep(wait)
                continue

            if response.status_code in (429, 503):
                wait = (2 ** attempt) * 2
                print(f"Сработало ограничение частоты ({response.status_code}). Ждём {wait}с...")
                time.sleep(wait)
                continue

            if "ap_email" in response.text:
                raise Exception("Экран входа — cookies истекли")

            return BeautifulSoup(response.text, "lxml")

        except Exception as e:
            if attempt == max_retries - 1:
                raise
            print(f"Попытка {attempt + 1} не удалась: {e}")

    return None

Небольшая заметка о прокси: Amazon блокирует известные диапазоны datacenter-IP на сетевом уровне — AWS, GCP, Azure, DigitalOcean. Если вы скрапите больше нескольких сотен страниц, residential-прокси практически обязательны — закладывайте $50–200+ в месяц в зависимости от объёма. Для небольших проектов (до 100 запросов в день) аккуратного троттлинга с домашнего IP обычно достаточно.

Amazon также проверяет TLS-отпечатки. Стандартная библиотека Python requests имеет известный JA3-хэш, который WAF может блокировать заранее. Для продакшен-скраперов стоит рассмотреть curl_cffi, который имитирует TLS-стек реального браузера. Для учебного уровня скрапинга (несколько сотен страниц) обычно достаточно requests с хорошими заголовками.

Шаг 6: Экспортируйте собранные отзывы Amazon в CSV или Excel

Когда отзывы собраны, превратить их в удобный формат проще всего через pandas:

import pandas as pd

df = pd.DataFrame(all_reviews)
df.to_csv("amazon_reviews.csv", index=False)
print(f"Экспортировано {len(df)} отзывов в amazon_reviews.csv")

Пример результата:

authorratingtitlecontentdatecountryverified
Sarah M.5.0Лучшая покупка годаBattery lasts all day, screen is gorgeous...January 15, 2025the United StatesTrue
Mike T.2.0Разочарован через 2 неделиThe charging port stopped working...February 3, 2025the United StatesTrue
Priya K.4.0Отличное соотношение цены и качестваDoes everything I need, minor lag on heavy apps...March 10, 2025the United StatesFalse

Для экспорта в Excel: df.to_excel("amazon_reviews.xlsx", index=False) (нужен openpyxl).

Для Google Sheets библиотека gspread работает, но требует 8+ шагов настройки Google Cloud — создание проекта, включение двух API, генерация service account credentials, расшаривание таблицы. Если кажется, что это больше настройки, чем сам скрапинг, вам не кажется. (Вот как раз тот случай, когда инструмент вроде Thunderbit, который экспортирует в Google Sheets одним кликом, начинает выглядеть очень привлекательно.)

Бонус: добавьте анализ тональности к отзывам всего в 5 строках Python

Большинство туториалов по скрапингу заканчиваются на экспорте в CSV. Но именно оценка тональности превращает сырые данные в бизнес-решения.

Самый быстрый базовый вариант — TextBlob:

from textblob import TextBlob

df["sentiment"] = df["content"].apply(lambda x: TextBlob(str(x)).sentiment.polarity)

Это даёт каждому отзыву score полярности от -1.0 (очень негативно) до +1.0 (очень позитивно). Пример результата:

content (сокращённо)ratingsentiment
"Battery lasts all day, screen is gorgeous..."5.00.65
"The charging port stopped working after..."2.0-0.40
"Does everything I need, minor lag on..."4.00.25
"Absolute garbage. Returned immediately."1.0-0.75
"It's okay. Nothing special but works."3.00.10

Самые интересные строки — это расхождения: 3-звёздочный отзыв с позитивным текстом или 5-звёздочный отзыв с негативной лексикой. Такие случаи часто раскрывают более тонкое мнение клиента, которое не видно только по звёздам.

ai-review-analysis.webp

Для более точного анализа в продакшене я рекомендую Hugging Face Transformers. VADER обучали на твитах, а не на товарных отзывах, а transformer-модели достигают более 98% точности в классификации отзывов по сравнению с лексиконными инструментами. Модель nlptown/bert-base-multilingual-uncased-sentiment даже предсказывает рейтинг от 1 до 5 звёзд напрямую:

from transformers import pipeline

clf = pipeline("sentiment-analysis",
               model="nlptown/bert-base-multilingual-uncased-sentiment")
df["predicted_stars"] = df["content"].apply(
    lambda x: int(clf(str(x)[:512])[0]["label"][0])
)

Отзывы Amazon имеют J-образное распределение — большой пик на 5 звёздах, меньший пик на 1 звезде и провал посередине. Это значит, что средний рейтинг часто плохо отражает реальное качество товара. Лучше выделять кластер 1-звёздочных отзывов и искать повторяющиеся темы — обычно именно там спрятана одна исправимая проблема.

Честный компромисс: Python своими руками vs. платные API vs. Thunderbit

Я поддерживал Python-скраперы для Amazon и скажу честно: они ломаются. Селекторы меняются, cookies истекают, Amazon выкатывает новый слой антибот-защиты, и внезапно ваша суббота уходит на отладку скрапера, а не на анализ данных. Участники форумов описывают то же самое — скрипты, которые «работали в прошлом месяце», теперь требуют постоянных патчей.

Вот как выглядят три основных подхода:

КритерийDIY Python (BS4/Selenium)Платный Scraping APIThunderbit (без кода)
Время на запуск1–3 часа30 мин (API key)2 минуты
СтоимостьБесплатно (+ прокси)$50–200+/месЕсть бесплатный тариф
Работа с экраном входаРучное управление cookiesОбычно уже решеноОбрабатывается автоматически
ПоддержкаВысокая нагрузка (селекторы ломаются)Низкая (провайдер поддерживает)Нулевая (AI адаптируется)
ПагинацияНужен свой кодВстроеноВстроено
Поддержка нескольких странОтдельные сессии на каждый доменОбычно поддерживаетсяЧерез браузер = ваш локальный регион
Анализ тональностиНужно писать свой кодИногда включёнЭкспортируйте в Sheets и анализируйте где удобно
Лучше всего дляОбучения, полного контроляМасштабных продакшен-пайплайновБыстрых выгрузок, не-IT команд

Python даёт полный контроль и действительно лучший способ понять, как веб-скрапинг работает изнутри. Но если ваш сценарий звучит как «мне нужен файл с отзывами конкурента в таблице к пятнице», а не «я хочу построить продакшен-пайплайн данных», то цена поддержки собственного скрапера может оказаться слишком высокой.

Thunderbit берёт на себя авторизацию, селекторы, пагинацию и экспорт в несколько кликов — попробуйте бесплатный тариф и посмотрите, подходит ли он под ваш сценарий. По мере того как Amazon усиливает антибот-защиту, AI-инструменты, которые адаптируются в реальном времени, будут становиться не просто удобством, а необходимостью.

Также вы можете посмотреть наш YouTube-канал Thunderbit с видеоразборами рабочих процессов скрапинга.

Как скрапить отзывы Amazon через Thunderbit без кода и без поддержки

Мы создали Thunderbit именно для тех случаев, когда поддерживать Python-скрапер кажется избыточным. Рабочий процесс выглядит так:

  1. Установите расширение Thunderbit для Chrome
  2. Откройте страницу отзывов товара Amazon в браузере (вы уже авторизованы, так что экран входа не проблема)
  3. Нажмите "AI Suggest Fields" — Thunderbit читает страницу и предлагает поля вроде Author, Rating, Title, Review Text, Date, Verified Purchase
  4. Нажмите "Scrape" — данные извлекаются мгновенно, с встроенной пагинацией
  5. Экспортируйте в Excel, Google Sheets, Airtable или Notion

Главное преимущество в том, что AI в Thunderbit каждый раз читает структуру страницы заново. Никаких CSS-селекторов для поддержки, никаких cookies, никакого антибот-кода. Когда Amazon меняет HTML, AI подстраивается. Для читателей, которым нужен программный доступ без полной ручной разработки, Thunderbit также предлагает Extract API — структурированное извлечение данных через API с AI-определением полей и без поддержки селекторов.

Для более глубокого изучения данных Amazon см. наши руководства по скрапингу товаров и отзывов Amazon и извлечению и анализу данных о продажах Amazon.

Советы по масштабному скрапингу отзывов Amazon на Python

Если вы собираете отзывы по многим ASIN, несколько практик сильно сэкономят вам нервы:

  • Обрабатывайте ASIN пакетами с паузами между товарами, а не только между страницами. Я использую задержки 10–15 секунд между ASIN.
  • Жёстко дедуплицируйте. При объединении нескольких комбинаций звёздных фильтров и сортировок будут пересечения. Используйте набор кортежей (title, author, date) как ключ дедупликации.
  • Логируйте ошибки. Отслеживайте, какие комбинации ASIN + page + filter не сработали, чтобы можно было повторить их без полного перескана.
  • Для больших проектов храните данные в базе. Простая SQLite-база масштабируется намного лучше, чем растущие CSV-файлы:
import sqlite3

conn = sqlite3.connect("reviews.db")
df.to_sql("reviews", conn, if_exists="append", index=False)
  • Запускайте регулярный скрапинг по расписанию. Для постоянного мониторинга настройте cron job или используйте функцию Thunderbit Scheduled Scraper — задайте URL и расписание, а всё остальное он сделает без сервера.

Дополнительные подходы мы разбираем в статьях о лучших автоматизированных инструментах веб-скрапинга и о том, как выгружать данные с сайтов в Excel.

Коротко о юридических и этических аспектах

Условия использования Amazon прямо запрещают «использование любого робота, паука, скрапера или других автоматизированных средств для доступа к Amazon Services». При этом недавняя судебная практика в США стала скорее благоприятной для скрапинга публичных данных. В деле Meta Platforms v. Bright Data (январь 2024) федеральный суд постановил, что скрапинг общедоступных данных не нарушает условия использования, если скрапер не является авторизованным "пользователем".

Нюанс в том, что скрапинг за логином, о котором и идёт речь в этом руководстве, уже попадает в область договорного права, поскольку при создании аккаунта вы соглашались с ToS Amazon. Скрапинг публично доступных featured reviews несёт меньше юридических рисков, чем сбор данных через экран входа.

Практические рекомендации: не распространяйте собранные данные в коммерческих целях, не собирайте личные данные пользователей сверх того, что уже публично отображается, соблюдайте robots.txt и при крупном или коммерческом использовании консультируйтесь с юристом. Это не юридическая консультация. Подробнее о правовом поле читайте в нашем обзоре юридических аспектов веб-скрапинга.

Заключение: скрапить отзывы Amazon на Python или сразу обойтись без кода

Кратко подведём итоги того, что разобрали в этом гайде:

  • Экран входа реален, но его можно обойти с помощью авторизации через cookies — скопируйте 7 cookies из браузера и подставьте их в requests.Session()
  • Используйте селекторы data-hook, а не CSS-классы, если не хотите, чтобы код ломался каждые несколько недель
  • Комбинируйте звёздные фильтры и сортировки, чтобы обойти лимит в 10 страниц и получать 500+ отзывов на товар
  • Добавьте анализ тональности через TextBlob для быстрого базового варианта или Hugging Face Transformers для более точного продакшен-решения
  • Поддерживайте антибот-защиту: троттлинг, ротацию User-Agent, экспоненциальный backoff и residential-прокси при больших объёмах

Python даёт полный контроль и лучше всего помогает понять, что происходит внутри. Но если ваш сценарий звучит как «мне нужна таблица с отзывами конкурента к пятнице», а не «я строю продакшен-пайплайн данных», то нагрузка по поддержке собственного скрапера может не окупиться.

Thunderbit берёт на себя авторизацию, селекторы, пагинацию и экспорт в несколько кликов — попробуйте бесплатный тариф и посмотрите, вписывается ли он в ваш рабочий процесс. По мере того как Amazon продолжает ужесточать антибот-защиту, AI-инструменты, которые адаптируются в реальном времени, будут переходить из категории «приятный бонус» в категорию «необходимость».

Также можете посмотреть наш YouTube-канал Thunderbit с видеоразборами рабочих сценариев скрапинга.

FAQ

1. Можно ли скрапить отзывы Amazon без входа в аккаунт?

Да, но только примерно 8 "featured reviews", которые отображаются на странице товара (/dp/{ASIN}/). Полные страницы отзывов с сортировкой, фильтрацией и пагинацией с конца 2024 года требуют авторизации. Для большинства бизнес-сценариев экран входа придётся обходить.

2. Законно ли скрапить отзывы Amazon?

Условия использования Amazon запрещают автоматический скрапинг. Однако недавняя судебная практика в США (Meta v. Bright Data, 2024; hiQ v. LinkedIn) поддерживает скрапинг общедоступных данных. Скрапинг за логином несёт более высокий юридический риск, так как вы соглашались с ToS Amazon. Для коммерческого использования консультируйтесь с юристом.

3. Сколько отзывов Amazon можно скрапить по одному товару?

Amazon ограничивает страницы отзывов 10 страницами для каждой комбинации сортировки и звёздного фильтра. Используя все 5 звёздных фильтров × 2 варианта сортировки, можно получить до 100 страниц — примерно 1 000 отзывов на товар. С фильтрами по ключевым словам теоретический потолок выше, но и дублей там заметно больше.

4. Какая Python-библиотека лучше всего подходит для скрапинга отзывов Amazon?

Самая распространённая и надёжная связка — requests + BeautifulSoup для разбора статичного HTML. Selenium полезен, когда требуется рендеринг JavaScript. Если нужен no-code вариант, который автоматически обходит экран входа и пагинацию, попробуйте Thunderbit.

5. Как не получить блокировку при скрапинге Amazon?

Чередуйте User-Agent из пула из 10+ реальных строк браузеров, добавляйте случайные задержки 2–5 секунд между запросами, используйте exponential backoff при ошибках 503/429, применяйте residential-прокси на масштабе (datacenter-IP уже заранее блокируются) и сохраняйте единые cookies между запросами. Если нужен полностью беспроблемный вариант, Thunderbit автоматически обходит антибот-защиту через ваш браузерный сеанс.

Подробнее

Fawad Khan
Fawad Khan
Фавад зарабатывает на жизнь писательством — и, честно говоря, ему это даже нравится. Он годами разбирался, что делает текст цепляющим, а что заставляет читателя пролистнуть дальше. Спросите его о маркетинге — и он будет говорить часами. Спросите о карбонаре — и он будет говорить еще дольше.
Содержание
Thunderbit · AI-агент для веб-данных

Извлекай данные с любой страницы за 1 клик

Нам доверяют более 250 000 пользователей
доступен бесплатный тариф
От веб-страницы к таблице
Опиши, что тебе нужно, — AI-агент Thunderbit соберет это и экспортирует в Excel, Google Sheets, Airtable или Notion. Старт бесплатный.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week