Мой парсер отзывов Amazon работал безупречно шесть недель — а потом однажды утром он вернул 200 OK и пустую страницу. Ни ошибки, ни CAPTCHA — только пустой HTML там, где раньше были сотни отзывов.
Если это вам знакомо, вы не одиноки. В конце 2025 года Amazon начал закрывать полные страницы отзывов за окно входа, и огромное количество Python-скриптов для парсинга сломалось буквально за одну ночь. Последние несколько месяцев я провёл в , разбирая эту проблему с двух сторон — создавая наш AI-скрейпер и одновременно поддерживая собственный Python-пайплайн для отзывов, — поэтому я решил написать тот самый гайд, которого мне самому не хватало, когда мой скрипт впервые перестал работать. В этой статье я покажу рабочий подход: аутентификацию через cookies, устойчивые селекторы, которые переживают CSS-обфускацию Amazon, обход ограничения на 10 страниц пагинации, защиту от антибота и бонусный блок по анализу тональности, который превращает сырой текст отзывов в реальные бизнес-инсайты. А если вы дочитаете до середины и подумаете: «Я бы лучше не поддерживал весь этот код», — я покажу, как делает ту же работу примерно за две минуты и вообще без Python.
Что такое парсинг отзывов Amazon и зачем он нужен?
Парсинг отзывов Amazon — это программное извлечение данных о клиентских отзывах: оценок, текста, имени автора, даты, отметки о подтверждённой покупке и других деталей со страниц товаров Amazon. Поскольку Amazon и так и не вернул их обратно, веб-скрейпинг остаётся единственным программным способом получить эти данные.
Цифры подтверждают важность этого подхода. , а . Показ всего 5 отзывов на странице товара может . Компании, которые системно анализируют тональность отзывов, получают . Это не отвлечённая дата-сайенс-теория — это конкурентная разведка, сигналы для улучшения продукта и маркетинговый язык, всё в открытом виде лежит на серверах Amazon.
Почему для парсинга отзывов Amazon используют Python
Python по-прежнему остаётся самым удобным языком для этой задачи. Это , а его экосистема — requests, BeautifulSoup, pandas, Scrapy — делает веб-скрейпинг доступным даже тем, кто не занимается разработкой полный рабочий день.
Разные команды используют эти данные по-разному:
| Команда | Сценарий использования | Что извлекают |
|---|---|---|
| Продукт / R&D | Выявление повторяющихся жалоб, приоритизация доработок | Текст отзывов 1–2 звезды, частотность ключевых слов |
| Продажи | Мониторинг настроений по товарам конкурентов | Рейтинги, динамика объёма отзывов |
| Маркетинг | Поиск формулировок клиентов для рекламных текстов | Позитивные фразы из отзывов, упоминания функций |
| Ecommerce Ops | Отслеживание динамики тональности собственного товара | Распределение по звёздам, доля подтверждённых покупок |
| Маркетинговые исследования | Сравнение лидеров категории по набору характеристик | Наборы отзывов по нескольким ASIN |
Один бренд кухонной посуды , доработал формулу продукта и вернул себе статус №1 Best Seller уже через 60 дней. Компания, выпускающая фитнес-трекеры, , обнаружила аллергию на латекс, выпустила гипоаллергенную версию и сократила возвраты на 40%. Именно такой ROI и оправдывает инженерные затраты.
Окно входа: почему ваш парсер отзывов Amazon перестал работать
14 ноября 2024 года . Изменение подтвердили и в , и в . Если открыть /product-reviews/{ASIN}/ в режиме инкогнито, вместо данных отзывов вы попадёте на страницу входа.

Симптомы обманчивы: скрипт получает ответ 200 OK, но в HTML-теле вместо отзывов находится форма входа (name="email", id="ap_password"). Ни кода ошибки. Ни CAPTCHA. Просто... ничего полезного.
Amazon сделал это из-за защиты от ботов и требований регионального соответствия. Механизм срабатывает не всегда одинаково — иногда свежий браузер успевает показать несколько отзывов до появления окна входа, особенно на первой странице, — но для любого скрейпера в масштабе стоит считать, что окно входа всегда активно.
Разные домены Amazon по странам (.de, .co.uk, .co.jp) применяют это ограничение независимо. Как написал один пользователь форума: «для каждой страны нужен отдельный логин». Cookies от .com не подойдут для .co.uk.
Избранные отзывы и полные отзывы: что можно получить без входа
На страницах товаров Amazon (/dp/{ASIN}/) по-прежнему отображается примерно без авторизации. Их выбирает алгоритм Amazon, и они полезны для быстрого понимания тональности, но их нельзя сортировать, фильтровать или листать по страницам.
Полные страницы отзывов (/product-reviews/{ASIN}/) — с сортировкой по новизне, фильтрацией по звёздам и пагинацией на сотни отзывов — требуют входа.
Если вам нужно лишь несколько отзывов для быстрой проверки настроения, достаточно страницы товара. Если нужны сотни или тысячи, придётся решать вопрос с аутентификацией.
Что нужно подготовить: настройка Python и библиотек
Прежде чем писать код, вот базовая подготовка:
- Сложность: средний уровень (уверенный Python, базовое понимание HTML)
- Время: около 45 минут на полный пайплайн; около 10 минут на простой парсинг
- Что понадобится: Python 3.8+, браузер Chrome, действующий аккаунт Amazon
Установите основные библиотеки:
1pip install requests beautifulsoup4 lxml pandas textblob
Дополнительно (для продвинутого анализа тональности):
1pip install transformers torch
Что такое ASIN? Это 10-символьный идентификатор товара Amazon. Его можно найти в любом URL товара — например, в amazon.com/dp/B0BCNKKZ91 ASIN будет B0BCNKKZ91. Именно этот ключ вы подставите в URL страницы отзывов.
Шаг 1: пройдите окно входа с помощью аутентификации через cookies
Самый надёжный способ — войти в Amazon в браузере, скопировать cookies текущей сессии и подставить их в requests.Session() в Python. Так вы избегаете CAPTCHA и SMS-двухфакторной аутентификации, с которыми часто сталкивается автоматический вход через Selenium.
Вам понадобятся эти семь cookies:
| Имя cookie | Назначение |
|---|---|
session-id | Идентификатор текущей сессии, который меняется |
session-id-time | Временная метка сессии |
session-token | Токен сессии, который меняется |
ubid-main | Идентификатор браузерной активности пользователя |
at-main | Основной токен аутентификации |
sess-at-main | Auth в рамках сессии |
x-main | Идентификатор, привязанный к email пользователя |
Как извлечь cookies из Chrome DevTools
- Войдите в amazon.com в Chrome
- Откройте DevTools (F12 или правый клик → Inspect)
- Перейдите в Application → Storage → Cookies →
https://www.amazon.com - Найдите в таблице каждое имя cookie и скопируйте его значение
- Сформируйте строку с разделением через
;для Python
Настройте сессию так:
1import requests
2session = requests.Session()
3> This paragraph contains content that cannot be parsed and has been skipped.
4> This paragraph contains content that cannot be parsed and has been skipped.
5session.cookies.update(cookies)
6session.headers.update(headers)
Важно: используйте один и тот же объект session во всех запросах. Так cookies остаются согласованными, и поведение больше похоже на обычную браузерную сессию. Обычно cookies живут от нескольких дней до нескольких недель при нагрузке скрейпинга, но если снова начнутся редиректы на вход, просто обновите их из браузера.
Для маркетплейсов не из .com имена cookies немного отличаются — например, у amazon.de используется at-acbde вместо at-main, у amazon.co.uk — at-acbuk и так далее. Для каждого маркетплейса нужна отдельная независимая сессия.
Шаг 2: сформируйте запрос и разберите HTML с отзывами через BeautifulSoup
URL отзывов Amazon выглядит так:
1https://www.amazon.com/product-reviews/{ASIN}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1
Основная функция:
1from bs4 import BeautifulSoup
2import time, random
3def get_soup(session, url):
4 time.sleep(random.uniform(2, 5)) # Пауза для вежливого обхода
5 response = session.get(url, timeout=15)
6 # Обнаружение окна входа
7 if "ap_email" in response.text or "Amazon Sign-In" in response.text:
8 raise Exception("Обнаружено окно входа — обновите cookies")
9 if response.status_code != 200:
10 raise Exception(f"HTTP {response.status_code}")
11 return BeautifulSoup(response.text, "lxml")
Есть небольшая хитрость, которая помогает: перед страницей отзывов сначала откройте страницу товара. Это создаёт более естественный паттерн поведения в вашей сессии.
1# Сначала откройте страницу товара (имитация обычного просмотра)
2product_url = f"https://www.amazon.com/dp/{asin}"
3session.get(product_url, timeout=15)
4time.sleep(random.uniform(1, 3))
5# Затем переходите на страницу отзывов
6reviews_url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1"
7soup = 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:
1import re
2def extract_reviews(soup):
3 reviews = []
4 review_divs = soup.select('[data-hook="review"]')
5 for div in review_divs:
6 # Рейтинг звёздами
7 rating_el = div.select_one('[data-hook="review-star-rating"]')
8 rating = None
9 if rating_el:
10 rating_text = rating_el.get_text(strip=True)
11 match = re.search(r'(\d\.?\d?)', rating_text)
12 if match:
13 rating = float(match.group(1))
14 # Заголовок
15 title_el = div.select_one('[data-hook="review-title"]')
16 title = title_el.get_text(strip=True) if title_el else ""
17 # Тело отзыва
18 body_el = div.select_one('[data-hook="review-body"]')
19 body = body_el.get_text(strip=True) if body_el else ""
20 # Автор
21 author_el = div.select_one('span.a-profile-name')
22 author = author_el.get_text(strip=True) if author_el else ""
23 # Дата и страна
24 date_el = div.select_one('[data-hook="review-date"]')
25 date_text = date_el.get_text(strip=True) if date_el else ""
26 # Формат: "Reviewed in the United States on January 15, 2025"
27 country_match = re.search(r'Reviewed in (.+?) on', date_text)
28 date_match = re.search(r'on (.+)$', date_text)
29 country = country_match.group(1) if country_match else ""
30 date = date_match.group(1) if date_match else ""
31 # Подтверждённая покупка
32 verified_el = div.select_one('[data-hook="avp-badge"]')
33 verified = bool(verified_el)
34> This paragraph contains content that cannot be parsed and has been skipped.
35 return reviews
Я использую этот набор селекторов на разных ASIN уже несколько месяцев, и атрибуты data-hook не менялись ни разу. А вот CSS-классы за тот же период успели смениться как минимум дважды.
Шаг 4: обработайте пагинацию и ограничение Amazon на 10 страниц
Amazon ограничивает параметр pageNumber десятью страницами по 10 отзывов на каждой — жёсткий потолок примерно в 100 отзывов на одну комбинацию фильтров. Кнопка «Next page» просто исчезает после 10-й страницы.
Базовый цикл пагинации:
1all_reviews = []
2for page in range(1, 11):
3 url = f"https://www.amazon.com/product-reviews/{asin}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber={page}"
4 soup = get_soup(session, url)
5 page_reviews = extract_reviews(soup)
6 if not page_reviews:
7 break # На этой странице больше нет отзывов
8 all_reviews.extend(page_reviews)
9 print(f"Page {page}: {len(page_reviews)} reviews")
Как получить больше 10 страниц отзывов Amazon
Обходной путь — разбиение по фильтрам. Каждая комбинация filterByStar и sortBy получает своё независимое окно из 10 страниц.
Значения звёздных фильтров: one_star, two_star, three_star, four_star, five_star
Значения сортировки: recent, helpful (по умолчанию)
Комбинируя все 5 звёздных фильтров × 2 варианта сортировки, можно получить до 100 страниц, то есть до 1 000 отзывов на один товар — а для товаров с неравномерным распределением оценок часто удаётся приблизиться почти к полному набору.
1star_filters = ["one_star", "two_star", "three_star", "four_star", "five_star"]
2sort_orders = ["recent", "helpful"]
3all_reviews = []
4seen_titles = set() # Простая дедупликация
5for star in star_filters:
6 for sort in sort_orders:
7 for page in range(1, 11):
8 url = (
9 f"https://www.amazon.com/product-reviews/{asin}"
10 f"?filterByStar={star}&sortBy={sort}&pageNumber={page}"
11 )
12 soup = get_soup(session, url)
13 page_reviews = extract_reviews(soup)
14 if not page_reviews:
15 break
16 for review in page_reviews:
17 # Удаление дублей по паре заголовок + автор
18 key = (review["title"], review["author"])
19 if key not in seen_titles:
20 seen_titles.add(key)
21 all_reviews.append(review)
22 print(f"[{star}/{sort}] Page {page}: {len(page_reviews)} reviews")
23print(f"Total unique reviews: {len(all_reviews)}")
Между корзинами будут пересечения, поэтому дедупликация обязательна. Я использую комбинацию заголовка и имени автора как быстрый ключ — не идеально, но это ловит подавляющее большинство дублей.
Шаг 5: обойдите антибот-защиту (ротация, задержки, повторы)
Amazon использует AWS WAF Bot Control, и он стал заметно жёстче. Однослойные меры защиты — только ротация User-Agent или только задержки — уже не спасают.
This paragraph contains content that cannot be parsed and has been skipped.
Готовая к продакшену обёртка с повторами:
1import time, random
2USER_AGENTS = [
3 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
4 "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",
5 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
6 "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",
7 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
8]
9def scrape_with_retries(session, url, max_retries=3):
10 for attempt in range(max_retries):
11 try:
12 session.headers["User-Agent"] = random.choice(USER_AGENTS)
13 time.sleep(random.uniform(2, 5))
14 response = session.get(url, timeout=15)
15 # Обнаружение блокировки
16 if "validateCaptcha" in response.url or "Robot Check" in response.text:
17 wait = (2 ** attempt) * 5
18 print(f"Обнаружена CAPTCHA. Ждём {wait}с...")
19 time.sleep(wait)
20 continue
21 if response.status_code in (429, 503):
22 wait = (2 ** attempt) * 2
23 print(f"Сработало ограничение частоты ({response.status_code}). Ждём {wait}с...")
24 time.sleep(wait)
25 continue
26 if "ap_email" in response.text:
27 raise Exception("Окно входа — cookies устарели")
28 return BeautifulSoup(response.text, "lxml")
29 except Exception as e:
30 if attempt == max_retries - 1:
31 raise
32 print(f"Попытка {attempt + 1} не удалась: {e}")
33 return None
Небольшое замечание про прокси: Amazon (AWS, GCP, Azure, DigitalOcean) на сетевом уровне. Если вы парсите больше нескольких сотен страниц, residential-прокси фактически обязательны — ожидайте затрат от $50 до $200+ в месяц в зависимости от объёма. Для небольших проектов (менее 100 запросов в день) аккуратное ограничение частоты с домашнего IP обычно работает нормально.
Amazon также проверяет TLS-фингерпринты. Стандартная библиотека Python requests имеет . Для продакшен-скрейперов стоит рассмотреть curl_cffi, который имитирует TLS-стек реального браузера. Для учебного парсинга (несколько сотен страниц) requests с хорошими headers обычно справляется.
Шаг 6: экспортируйте отзывы Amazon в CSV или Excel
Когда вы собрали отзывы, перевести их в удобный формат очень просто с помощью pandas:
1import pandas as pd
2df = pd.DataFrame(all_reviews)
3df.to_csv("amazon_reviews.csv", index=False)
4print(f"Экспортировано {len(df)} отзывов в amazon_reviews.csv")
Пример результата:
| author | rating | title | content | date | country | verified |
|---|---|---|---|---|---|---|
| Sarah M. | 5.0 | Лучшая покупка года | Батарея держит весь день, экран великолепный... | January 15, 2025 | the United States | True |
| Mike T. | 2.0 | Разочарован через 2 недели | Перестал работать разъём для зарядки... | February 3, 2025 | the United States | True |
| Priya K. | 4.0 | Отличное соотношение цены и качества | Делает всё, что мне нужно, только чуть тормозит на тяжёлых приложениях... | March 10, 2025 | the United States | False |
Для экспорта в Excel: df.to_excel("amazon_reviews.xlsx", index=False) (нужен openpyxl).
Для Google Sheets можно использовать библиотеку gspread, но она требует — создать проект, включить два API, сгенерировать credentials сервисного аккаунта, расшарить таблицу. Если это звучит как более сложная подготовка, чем сам парсинг, вы не ошибаетесь. (Это как раз тот случай, когда инструмент вроде , который экспортирует в Google Sheets одним кликом, начинает выглядеть очень привлекательно.)
Бонус: добавьте анализ тональности к собранным отзывам за 5 строк Python
Большинство гайдов по парсингу заканчиваются на экспорте CSV. Но именно анализ тональности превращает сырые данные в бизнес-решения.
Самый быстрый базовый вариант — TextBlob:
1from textblob import TextBlob
2df["sentiment"] = df["content"].apply(lambda x: TextBlob(str(x)).sentiment.polarity)
Это даст каждой записи показатель полярности от -1.0 (очень негативно) до +1.0 (очень позитивно). Пример результата:
| content (сокр.) | rating | sentiment |
|---|---|---|
| "Battery lasts all day, screen is gorgeous..." | 5.0 | 0.65 |
| "The charging port stopped working after..." | 2.0 | -0.40 |
| "Does everything I need, minor lag on..." | 4.0 | 0.25 |
| "Absolute garbage. Returned immediately." | 1.0 | -0.75 |
| "It's okay. Nothing special but works." | 3.0 | 0.10 |
Самые интересные строки — это расхождения: например, 3-звёздочный отзыв с позитивным текстом или 5-звёздочный отзыв с негативной лексикой. Такие несоответствия часто показывают нюансные мнения клиентов, которые не видно по одной только оценке в звёздах.

Для продакшен-точности лучше использовать Hugging Face Transformers. , а по сравнению с лексиконными инструментами. Модель nlptown/bert-base-multilingual-uncased-sentiment даже предсказывает рейтинг 1–5 звёзд напрямую:
1from transformers import pipeline
2clf = pipeline("sentiment-analysis",
3 model="nlptown/bert-base-multilingual-uncased-sentiment")
4df["predicted_stars"] = df["content"].apply(
5 lambda x: int(clf(str(x)[:512])[0]["label"][0])
6)
Отзывы Amazon следуют — большой пик на 5 звёздах, меньший пик на 1 звезде и провал посередине. Это означает, что средний рейтинг часто плохо отражает реальное качество товара. Выделяйте кластер 1-звёздочных отзывов и ищите повторяющиеся темы — обычно именно там скрыт один исправляемый дефект.
Честный компромисс: Python своими силами vs платные API для парсинга vs Thunderbit
Я поддерживал Python-скрейперы для Amazon, и скажу честно: они ломаются. Селекторы меняются, cookies истекают, Amazon выкатывает новый слой антибот-защиты, и в итоге ваша суббота уходит на отладку парсера вместо анализа данных. Пользователи на форумах описывают то же самое — скрипты, которые «работали в прошлом месяце», теперь требуют постоянных правок.
Вот как выглядят три основных подхода:
| Критерий | DIY Python (BS4/Selenium) | Платный Scraping API | Thunderbit (без кода) |
|---|---|---|---|
| Время настройки | 1–3 часа | 30 минут (API-ключ) | 2 минуты |
| Стоимость | Бесплатно (+ затраты на прокси) | $50–200+/мес | Есть бесплатный тариф |
| Работа с окном входа | Ручное управление cookies | Обычно уже решено | Обрабатывается автоматически |
| Поддержка и обслуживание | Высокая (селекторы ломаются) | Низкая (поддерживает провайдер) | Нулевая (AI адаптируется) |
| Пагинация | Нужен свой код | Встроена | Встроена |
| Поддержка разных стран | Отдельные сессии для каждого домена | Обычно поддерживается | Через браузер = ваша локаль |
| Анализ тональности | Писать свой код | Иногда включён | Экспорт в Sheets, анализ где угодно |
| Лучшее применение | Обучение, полный контроль | Масштабные production-пайплайны | Быстрые выгрузки, команды без разработчиков |
Python даёт полный контроль и действительно лучше всего помогает понять, как веб-скрейпинг работает изнутри. Платные API (ScrapingBee, Oxylabs, Bright Data) имеют смысл для продакшен-пайплайнов, где надёжность важнее стоимости. А для команд, которым нужны данные по отзывам без лишней разработки — например, ecommerce-команды, еженедельно отслеживающие товары конкурентов, или маркетинг, которому нужны формулировки клиентов для рекламных текстов, — есть третий путь.
Как собирать отзывы Amazon с помощью Thunderbit (без кода и без поддержки)
Мы создали именно для тех сценариев, где поддерживать Python-скрейпер — это уже перебор. Рабочий процесс выглядит так:
- Установите
- Откройте страницу отзывов товара Amazon в браузере (вы уже вошли в аккаунт, так что окно входа не проблема)
- Нажмите "AI Suggest Fields" — Thunderbit проанализирует страницу и предложит столбцы вроде Author, Rating, Title, Review Text, Date, Verified Purchase
- Нажмите "Scrape" — данные извлекаются мгновенно, с встроенной пагинацией
- Экспортируйте в Excel, Google Sheets, Airtable или Notion
Главное преимущество Thunderbit в том, что AI каждый раз заново читает структуру страницы. Не нужно поддерживать CSS-селекторы, управлять cookies или писать антибот-код. Когда Amazon меняет HTML, AI адаптируется. А для читателей, которым нужен программный доступ без полной ручной разработки, у Thunderbit также есть — извлечение структурированных данных через API с AI-определением полей, без поддержки селекторов.
Для более глубокого изучения данных Amazon смотрите наши руководства по и .
Советы по масштабному парсингу отзывов Amazon на Python
Если вы собираете отзывы по многим ASIN, несколько привычек сэкономят вам массу нервов:
- Пакетируйте ASIN и делайте паузы между товарами, а не только между страницами. Я использую паузу 10–15 секунд между ASIN.
- Жёстко дедуплицируйте. При объединении разных комбинаций звёздных фильтров и сортировок будут пересечения. Используйте set с кортежами
(title, author, date)как ключ для дедупликации. - Логируйте ошибки. Отслеживайте, какие комбинации ASIN + page + filter не сработали, чтобы повторить их без повторного парсинга всего массива.
- Храните данные в базе для больших проектов. Простая база SQLite масштабируется намного лучше, чем бесконечно растущие CSV-файлы:
1import sqlite3
2conn = sqlite3.connect("reviews.db")
3df.to_sql("reviews", conn, if_exists="append", index=False)
- Планируйте повторяющиеся парсинги. Для постоянного мониторинга настройте cron-задачу или используйте функцию Thunderbit Scheduled Scraper — просто задайте URL и расписание, а всё остальное он выполнит без сервера.
Дополнительные подходы смотрите в наших материалах и .
Коротко о правовых и этических вопросах
В прямо сказано, что запрещено «использовать робота, паука, скрейпер или любые другие автоматизированные средства для доступа к сервисам Amazon». При этом недавняя судебная практика в США скорее благоприятна для скрейпинга публичных данных. В деле федеральный суд постановил, что парсинг общедоступных данных не нарушает условия использования, если скрейпер не является авторизованным «пользователем».
Есть важный нюанс: парсинг за логином (а именно об этом тут и идёт речь) переводит вас в плоскость договорного права, поскольку при создании аккаунта вы соглашаетесь с условиями Amazon. Сбор публично видимых избранных отзывов несёт меньший юридический риск, чем парсинг за окном входа.
Практические рекомендации: не распространяйте собранные данные в коммерческих целях, не собирайте личные данные пользователей сверх того, что уже открыто видно, соблюдайте robots.txt и при крупномасштабном или коммерческом использовании консультируйтесь с юристом. Это не юридическая консультация. Подробнее о правовом поле читайте в нашем обзоре .
Вывод: собирайте отзывы Amazon с Python или вообще без кода
Кратко о том, что мы разобрали в этом гайде:
- Окно входа реально существует, но его можно пройти через аутентификацию по cookies — скопируйте 7 cookies из браузера и подставьте их в
requests.Session() - Используйте селекторы
data-hook, а не CSS-классы, если не хотите, чтобы код ломался каждые несколько недель - Комбинируйте звёздные фильтры и сортировки, чтобы обойти ограничение на 10 страниц и получить более 500 отзывов на товар
- Добавьте анализ тональности через TextBlob для быстрого базового уровня или Hugging Face Transformers для продакшен-точности
- Поддерживайте антибот-защиту: троттлинг, ротацию User-Agent, экспоненциальные повторы и residential-прокси при масштабе
Python даёт полный контроль и лучше всего помогает понять, что происходит под капотом. Но если ваш сценарий звучит как «мне нужны отзывы конкурентов в таблице к пятнице», а не «я хочу построить production data pipeline», то поддержка собственного скрейпера может быть просто невыгодной.
берёт на себя аутентификацию, селекторы, пагинацию и экспорт буквально в несколько кликов — попробуйте и посмотрите, подходит ли он вашему рабочему процессу. По мере того как Amazon продолжает усиливать антибот-защиту, инструменты на базе AI, которые адаптируются в реальном времени, будут становиться не приятным бонусом, а необходимостью.
Также вы можете посмотреть наш с видео-разборами рабочих процессов парсинга.
FAQ
1. Можно ли парсить отзывы Amazon без входа в аккаунт?
Да, но только примерно 8 «избранных отзывов», которые показываются на странице товара (/dp/{ASIN}/). Полные страницы отзывов с сортировкой, фильтрацией и пагинацией с конца 2024 года требуют авторизации. Для большинства бизнес-задач окно входа придётся учитывать.
2. Законно ли парсить отзывы Amazon?
Условия использования Amazon запрещают автоматический парсинг. Однако недавняя судебная практика США (Meta v. Bright Data, 2024; hiQ v. LinkedIn) поддерживает сбор общедоступных данных. Парсинг за логином несёт более высокий юридический риск, поскольку вы уже согласились с условиями Amazon. Для коммерческого использования проконсультируйтесь с юристом.
3. Сколько отзывов Amazon можно собрать на один товар?
Amazon ограничивает страницы отзывов 10 страницами для каждой комбинации сортировки и звёздного фильтра. Используя все 5 звёздных фильтров × 2 варианта сортировки, можно получить до 100 страниц — примерно 1 000 отзывов на один товар. При использовании фильтров по ключевым словам теоретический предел ещё выше, хотя и с заметным количеством дублей.
4. Какая библиотека Python лучше всего подходит для парсинга отзывов Amazon?
Наиболее распространённая и надёжная комбинация — requests + BeautifulSoup для разбора статического HTML. Selenium полезен, если требуется отрисовка JavaScript. Если нужен no-code вариант, который автоматически решает вопросы логина и пагинации, попробуйте .
5. Как избежать блокировки при парсинге Amazon?
Ротируйте строки User-Agent из пула из 10+ реальных браузеров, добавляйте случайные задержки 2–5 секунд между запросами, реализуйте экспоненциальный backoff для ошибок 503/429, используйте residential-прокси при масштабе (дата-центровые IP часто блокируются заранее) и сохраняйте одинаковые cookies сессии между запросами. Если нужен полностью беспроблемный подход, Thunderbit автоматически обрабатывает антибот-защиту через вашу браузерную сессию.
Подробнее
