Můj Amazon review scraper běžel bez chyby šest týdnů — a pak jednoho rána vrátil 200 OK a stránku plnou prázdna. Žádná chyba, žádná CAPTCHA, jen prázdné HTML tam, kde dřív byly stovky recenzí.
Jestli vám to zní povědomě, nejste sami. Koncem roku 2025 začal Amazon skrývat celé stránky s recenzemi za přihlašovací bránu a spousta Python skriptů na scrapování se přes noc rozpadla. Posledních pár měsíců jsem v Thunderbit řešil tenhle problém z obou stran — při vývoji našeho AI scrapovacího nástroje i při údržbě vlastního Python pipeline na recenze — takže jsem si řekl, že je čas sepsat návod, který bych tehdy sám potřeboval. Tenhle článek prochází funkčním přístupem: autentizací přes cookies, stabilními selektory, které přežijí Amazonovu CSS obfuskaci, obejitím limitu 10 stran, obranou proti botům a navíc i sekcí o sentiment analýze, která z obyčejného textu recenzí udělá reálné byznysové poznatky. A pokud si v půlce řeknete: „Radši bych tohle celé vůbec nemusel udržovat v kódu,“ ukážu vám, jak to samé zvládne Thunderbit přibližně za dvě minuty a bez jediné řádky Pythonu.
Co je scrapování Amazon recenzí a proč na tom záleží?
Scrapování Amazon recenzí je proces programového získávání dat o zákaznických recenzích — hvězdičkového hodnocení, textu recenze, jména autora, data, štítku ověřeného nákupu — z produktových stránek Amazonu. Protože Amazon už v roce 2010 odstranil obsah recenzí ze svého Product Advertising API a nikdy ho nevrátil, web scraping je jediná programová cesta k těmto datům.
Čísla to potvrzují. 95 % nakupujících si před koupí čte recenze a 94 % lidí označuje Amazon jako svůj hlavní zdroj produktových recenzí. Zobrazení pouhých 5 recenzí na produktové stránce může zvýšit konverzi o 270 %. Firmy, které systematicky analyzují sentiment v recenzích, dosahují až o 15 % vyšší retence zákazníků. Tohle není abstraktní datová věda — jsou to signály konkurenceschopnosti, podklady pro zlepšování produktu a marketingový jazyk, všechno v čistém textu na serverech Amazonu.
Proč scrapovat Amazon recenze v Pythonu
Python je pro tuhle práci pořád první volba. Je to nejžádanější jazyk v průzkumu Stack Overflow Developer Survey 2024 a jeho ekosystém — requests, BeautifulSoup, pandas, Scrapy — dělá scraping přístupný i lidem, kteří nejsou full-time vývojáři.
Různé týmy s těmito daty pracují různě:
| Tým | Použití | Co získávají |
|---|---|---|
| Produkt / R&D | Hledání opakujících se stížností, prioritizace oprav | Text 1–2hvězdičkových recenzí, četnost klíčových slov |
| Obchod | Sledování sentimentu u konkurenčních produktů | Hodnocení, trendy v objemu recenzí |
| Marketing | Vyhledání zákaznického jazyka pro copy | Pozitivní fráze z recenzí, zmínky o funkcích |
| Ecommerce ops | Sledování sentimentu vlastních produktů v čase | Rozložení hvězdiček, poměr ověřených nákupů |
| Průzkum trhu | Porovnání lídrů kategorií podle funkcí | Datové sady recenzí pro více ASINů |
Jedna značka kuchyňského nádobí zanalyzovala negativní recenze a zjistila, že 22 % z nich zmiňuje „opotřebování nepřilnavého povrchu“, přepracovala produkt a do 60 dnů získala zpět pozici #1 Best Seller. Firma vyrábějící fitness trackery z recenzí odhalila „podráždění od pásku“, identifikovala problém s latexovou alergií, uvedla hypoalergenní variantu a snížila vratky o 40 %. Tohle je typ návratnosti, kvůli které se technická práce vyplatí.
Přihlašovací brána: Proč váš Amazon review scraper přestal fungovat
- listopadu 2024 začal Amazon vyžadovat přihlášení pro zobrazení celé stránky s produktovými recenzemi. Změnu potvrdily komunitní fóra i blogy dodavatelů scrapovacích nástrojů. Když otevřete
/product-reviews/{ASIN}/v anonymním okně, místo dat s recenzemi se přesměrujete na přihlašovací stránku.

Příznaky jsou nenápadné: skript dostane odpověď 200 OK, ale tělo HTML obsahuje přihlašovací formulář (name="email", id="ap_password") místo recenzí. Žádný chybový kód. Žádná CAPTCHA. Jen... nic užitečného.
Amazon to udělal kvůli ochraně proti botům a kvůli regionální shodě s pravidly. Prosazování je nekonzistentní — někdy čerstvé okno prohlížeče načte pár recenzí, než se brána aktivuje, zejména na první stránce — ale u scrapování ve větším měřítku je lepší počítat s tím, že brána je zapnutá pořád.
Různé domény Amazonu pro jednotlivé země (.de, .co.uk, .co.jp) bránu vynucují samostatně. Jak napsal jeden uživatel fóra: „pro každou zemi je potřeba samostatné přihlášení.“ Cookies z .com vám na .co.uk fungovat nebudou.
Featured Reviews vs. Full Reviews: Co je možné získat bez přihlášení
Produktové stránky Amazonu (/dp/{ASIN}/) stále zobrazují zhruba 8 „featured reviews“ i bez autentizace. Jsou vybrané algoritmem Amazonu a hodí se pro rychlý sentiment check, ale nejdou řadit, filtrovat ani stránkovat.
Plné stránky recenzí (/product-reviews/{ASIN}/) — se сортированím podle nejnovějších, filtrováním podle hvězdiček a stránkováním přes stovky recenzí — už vyžadují přihlášení.
Pokud potřebujete jen pár recenzí pro rychlý přehled, scrapujte produktovou stránku. Pro stovky nebo tisíce budete muset vyřešit autentizaci.
Co potřebujete před začátkem: Python setup a knihovny
Než napíšeme jakýkoli kód, tady je příprava:
- Obtížnost: střední (pohodlná práce s Pythonem, základní znalost HTML)
- Čas: cca 45 minut pro celý pipeline; cca 10 minut pro základní scraping
- Co budete potřebovat: Python 3.8+, prohlížeč Chrome, platný účet Amazon
Nainstalujte základní knihovny:
pip install requests beautifulsoup4 lxml pandas textblob
Volitelné (pro pokročilou sentiment analýzu):
pip install transformers torch
Co je ASIN? Je to 10místný identifikátor produktu od Amazonu. Najdete ho v každé produktové URL — například v amazon.com/dp/B0BCNKKZ91 je ASIN B0BCNKKZ91. To je klíč, který vložíte do URL s recenzemi.
Krok 1: Překonejte přihlašovací bránu pomocí autentizace přes cookies
Nejspolehlivější postup je přihlásit se na Amazon v prohlížeči, zkopírovat session cookies a vložit je do requests.Session() v Pythonu. Tím se vyhnete CAPTCHA a SMS 2FA, které často komplikují automatizované přihlašování přes Selenium.
Budete potřebovat těchto sedm cookies:
| Název cookie | Účel |
|---|---|
session-id | Rotující identifikátor relace |
session-id-time | Časová značka relace |
session-token | Rotující token relace |
ubid-main | Identifikátor prohlížení uživatele |
at-main | Primární ověřovací token |
sess-at-main | Ověření v rámci relace |
x-main | Identifikátor navázaný na e-mail uživatele |
Jak získat cookies z Chrome DevTools
- Přihlaste se na amazon.com v Chromu
- Otevřete DevTools (F12 nebo klik pravým → Inspect)
- Přejděte na Application → Storage → Cookies →
https://www.amazon.com - V tabulce najděte každou cookie a zkopírujte její hodnotu
- Spojte je do řetězce odděleného středníky pro Python
Session nastavte takto:
import requests
session = requests.Session()
# Sem vložte hodnoty cookies
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)
Důležité: Stejný objekt session používejte pro všechny požadavky. Cookies pak zůstávají konzistentní a chování se více podobá skutečnému prohlížeči. Cookies obvykle vydrží dny až týdny při scrapovací zátěži, ale pokud se zase začnete přesměrovávat na přihlášení, obnovte je v prohlížeči.
U marketplace mimo .com se názvy cookies mírně liší — amazon.de používá at-acbde místo at-main, amazon.co.uk používá at-acbuk a podobně. Každý marketplace potřebuje vlastní nezávislou session.
Krok 2: Sestavte request a parsujte HTML recenzí pomocí BeautifulSoup
URL recenzí Amazonu má tento formát:
https://www.amazon.com/product-reviews/{ASIN}/ref=cm_cr_arp_d_viewopt_srt?sortBy=recent&pageNumber=1
Základní funkce:
from bs4 import BeautifulSoup
import time, random
def get_soup(session, url):
time.sleep(random.uniform(2, 5)) # Vstřícná prodleva
response = session.get(url, timeout=15)
# Detekce přihlašovací brány
if "ap_email" in response.text or "Amazon Sign-In" in response.text:
raise Exception("Byla detekována přihlašovací brána — obnovte cookies")
if response.status_code != 200:
raise Exception(f"HTTP {response.status_code}")
return BeautifulSoup(response.text, "lxml")
Pomáhá jeden malý trik: než otevřete stránku s recenzemi, nejdřív navštivte produktovou stránku. Tím v session vytvoříte přirozenější vzorec chování.
# Nejprve navštivte produktovou stránku (simulace běžného prohlížení)
product_url = f"https://www.amazon.com/dp/{asin}"
session.get(product_url, timeout=15)
time.sleep(random.uniform(1, 3))
# Potom stránku s recenzemi
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)
Krok 3: Používejte stabilní selektory pro získání dat o recenzích (nespoléhejte na CSS třídy)
Tady se rozpadá většina tutoriálů z let 2022–2023. Amazon maskuje názvy CSS tříd — mění se průběžně a jak si stěžoval jeden frustrovaný vývojář ve fóru: „neměli tam jediný vzor pro názvy tříd span tagů.“
Řešení: Amazon používá u prvků recenzí atributy data-hook, a ty jsou překvapivě stabilní. Jsou to sémantické identifikátory, na kterých závisí i frontend Amazonu, takže se nerandomizují.
| Pole recenze | Stabilní selektor (data-hook) | Křehký selektor (class) |
|---|---|---|
| Text recenze | [data-hook="review-body"] | .review-text-content (mění se) |
| Hvězdičkové hodnocení | [data-hook="review-star-rating"] | .a-icon-alt (nejasné) |
| Název recenze | [data-hook="review-title"] | .review-title (někdy) |
| Jméno autora | span.a-profile-name | Poměrně stabilní |
| Datum recenze | [data-hook="review-date"] | .review-date (záleží na regionu) |
| Ověřený nákup | [data-hook="avp-badge"] | span.a-size-mini |
Extrahovací kód s selektory data-hook:
import re
def extract_reviews(soup):
reviews = []
review_divs = soup.select('[data-hook="review"]')
for div in review_divs:
# Hvězdičkové hodnocení
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))
# Název
title_el = div.select_one('[data-hook="review-title"]')
title = title_el.get_text(strip=True) if title_el else ""
# Tělo recenze
body_el = div.select_one('[data-hook="review-body"]')
body = body_el.get_text(strip=True) if body_el else ""
# Autor
author_el = div.select_one('span.a-profile-name')
author = author_el.get_text(strip=True) if author_el else ""
# Datum a země
date_el = div.select_one('[data-hook="review-date"]')
date_text = date_el.get_text(strip=True) if date_el else ""
# Formát: "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 ""
# Ověřený nákup
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
Tuhle sadu selektorů používám proti několika ASINům už měsíce a atributy data-hook se nezměnily ani jednou. CSS třídy se za stejnou dobu změnily minimálně dvakrát.
Krok 4: Ošetřete stránkování a limit 10 stran u Amazonu
Amazon omezuje parametr pageNumber na 10 stran po 10 recenzích — tvrdý strop zhruba 100 recenzí pro jednu kombinaci filtrů. Tlačítko „Next page“ po stránce 10 prostě zmizí.
Základní smyčka pro stránkování:
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 # Na této stránce už nejsou žádné další recenze
all_reviews.extend(page_reviews)
print(f"Stránka {page}: {len(page_reviews)} recenzí")
Jak získat víc než 10 stran Amazon recenzí
Obcházení spočívá v bucketování filtrů. Každá kombinace filterByStar a sortBy má vlastní nezávislé okno 10 stran.
Hodnoty filtru hvězdiček: one_star, two_star, three_star, four_star, five_star
Hodnoty řazení: recent, helpful (výchozí)
Když zkombinujete všech 5 filtrů hvězdiček × 2 řazení, dostanete se až na 100 stran, tedy 1 000 recenzí na produkt — a u produktů s nerovnoměrným rozložením hvězdiček se často dostanete velmi blízko kompletní sadě recenzí.
star_filters = ["one_star", "two_star", "three_star", "four_star", "five_star"]
sort_orders = ["recent", "helpful"]
all_reviews = []
seen_titles = set() # Jednoduchá deduplikace
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:
# Deduplikace podle kombinace název + autor
key = (review["title"], review["author"])
if key not in seen_titles:
seen_titles.add(key)
all_reviews.append(review)
print(f"[{star}/{sort}] Stránka {page}: {len(page_reviews)} recenzí")
print(f"Celkem unikátních recenzí: {len(all_reviews)}")
Mezi jednotlivými buckety bude překryv, takže deduplikace je nutná. Používám kombinaci název recenze + jméno autora jako rychlý klíč — není dokonalý, ale zachytí většinu duplicit.
Krok 5: Vyhněte se ochraně proti botům (rotace, throttling, retry)
Amazon používá AWS WAF Bot Control a výrazně zpřísnil detekci. Jednovrstvá obrana (jen rotace User-Agentů, jen přidání prodlev) už nestačí.
| Technika | Implementace |
|---|---|
| Rotace User-Agentů | Náhodný výběr z 10+ reálných browser stringů |
| Exponenciální backoff | Zpoždění retry 2s → 4s → 8s při 503 |
| Throttling požadavků | random.uniform(2, 5) sekund mezi stránkami |
| Rotace proxy | Střídání residential proxy |
| Otisk session | Konzistentní cookies + hlavičky pro jednu session |
| TLS impersonace | V produkci použijte curl_cffi místo standardního requests |
Retry wrapper připravený pro produkci:
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)
# Detekce blokace
if "validateCaptcha" in response.url or "Robot Check" in response.text:
wait = (2 ** attempt) * 5
print(f"Detekována CAPTCHA. Čekám {wait}s...")
time.sleep(wait)
continue
if response.status_code in (429, 503):
wait = (2 ** attempt) * 2
print(f"Rate limit ({response.status_code}). Čekám {wait}s...")
time.sleep(wait)
continue
if "ap_email" in response.text:
raise Exception("Přihlašovací brána — cookies vypršely")
return BeautifulSoup(response.text, "lxml")
except Exception as e:
if attempt == max_retries - 1:
raise
print(f"Pokus {attempt + 1} selhal: {e}")
return None
Poznámka k proxy: Amazon blokuje známé datacentrové IP rozsahy (AWS, GCP, Azure, DigitalOcean) na síťové úrovni. Pokud scrapujete víc než pár set stránek, residential proxy jsou v praxi téměř nutnost — počítejte s náklady 50–200+ USD měsíčně podle objemu. Pro menší projekty (pod 100 požadavků denně) často stačí opatrné zpomalování z domácí IP.
Amazon také kontroluje TLS fingerprinty. Standardní Python requests má známý JA3 hash, který WAF často blokují předem. U produkčních scraperů zvažte curl_cffi, který napodobuje TLS stack skutečného prohlížeče. U tutoriálového rozsahu (pár set stránek) obvykle stačí requests s dobrými hlavičkami.
Krok 6: Exportujte scrapované Amazon recenze do CSV nebo Excelu
Jakmile máte recenze stažené, dostat je do použitelného formátu je s pandas jednoduché:
import pandas as pd
df = pd.DataFrame(all_reviews)
df.to_csv("amazon_reviews.csv", index=False)
print(f"Exportováno {len(df)} recenzí do amazon_reviews.csv")
Ukázkový výstup:
| author | rating | title | content | date | country | verified |
|---|---|---|---|---|---|---|
| Sarah M. | 5.0 | Nejlepší nákup roku | Baterie vydrží celý den, displej je nádherný... | January 15, 2025 | the United States | True |
| Mike T. | 2.0 | Zklamání po 2 týdnech | Nabíjecí port přestal fungovat... | February 3, 2025 | the United States | True |
| Priya K. | 4.0 | Skvělá hodnota za ty peníze | Dělá všechno, co potřebuji, jen občas laguje u náročných aplikací... | March 10, 2025 | the United States | False |
Pro export do Excelu: df.to_excel("amazon_reviews.xlsx", index=False) (vyžaduje openpyxl).
Pro Google Sheets funguje gspread, ale vyžaduje 8+ kroků konfigurace v Google Cloud — vytvoření projektu, povolení dvou API, vygenerování service account přihlašovacích údajů, sdílení sheetu. Pokud to zní jako větší setup než samotné scrapování, nepletete se. (To je přesně moment, kdy začíná být nástroj jako Thunderbit, který exportuje do Google Sheets jedním klikem, hodně lákavý.)
Bonus: Přidejte sentiment analýzu do scrapovaných recenzí za 5 řádků Pythonu
Většina tutoriálů končí exportem do CSV. Jenže sentiment scoring promění surová data v rozhodnutí pro byznys.
Nejrychlejší baseline je TextBlob:
from textblob import TextBlob
df["sentiment"] = df["content"].apply(lambda x: TextBlob(str(x)).sentiment.polarity)
To vám dá skóre polarity od -1.0 (velmi negativní) do +1.0 (velmi pozitivní) pro každou recenzi. Ukázkový výstup:
| content (zkráceno) | rating | sentiment |
|---|---|---|
| "Baterie vydrží celý den, displej je nádherný..." | 5.0 | 0.65 |
| "Nabíjecí port přestal fungovat po..." | 2.0 | -0.40 |
| "Dělá všechno, co potřebuju, jen drobné zpoždění u..." | 4.0 | 0.25 |
| "Absolutní odpad. Okamžitě vráceno." | 1.0 | -0.75 |
| "Ujde to. Nic extra, ale funguje." | 3.0 | 0.10 |
Zajímavé jsou nesoulady — například 3hvězdičková recenze s pozitivně znějícím textem nebo 5hvězdičková recenze s negativním jazykem. Tyhle rozdíly často odhalí jemnější názory zákazníků, které samotné hvězdičky nezachytí.

Pro přesnost na produkční úrovni se doporučují Hugging Face Transformers. VADER byl trénovaný na tweetech, ne na produktových recenzích a transformer modely dosahují přes 98% přesnosti při klasifikaci recenzí ve srovnání s lexikonovými nástroji. Model nlptown/bert-base-multilingual-uncased-sentiment dokonce přímo předpovídá 1–5 hvězdiček:
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 recenze mají J-rozložení — velký vrchol u 5 hvězd, menší vrchol u 1 hvězdy a propad uprostřed. To znamená, že průměrné hvězdičkové hodnocení je často slabý ukazatel skutečné kvality produktu. Rozdělte si klastr 1hvězdičkových recenzí a hledejte opakující se témata — tam obvykle leží jedna opravitelná závada.
Upřímný kompromis: DIY Python vs. placená scraping API vs. Thunderbit
Udržoval jsem Python scrapery pro Amazon a řeknu to na rovinu: rozbíjejí se. Selectory se mění, cookies vyprší, Amazon nasadí novou vrstvu detekce botů a najednou místo analýzy dat trávíte sobotní dopoledne debugováním scraperu. Stejnou frustraci popisují i lidé na fórech — skripty, které „fungovaly minulý měsíc“, teď potřebují neustálé záplaty.
Takhle vypadají tři hlavní přístupy vedle sebe:
| Kritérium | DIY Python (BS4/Selenium) | Placené scraping API | Thunderbit (no-code) |
|---|---|---|---|
| Čas na nastavení | 1–3 hodiny | 30 min (API klíč) | 2 minuty |
| Náklady | Zdarma (+ proxy) | 50–200+ USD/měsíc | K dispozici free tier |
| Řešení přihlašovací brány | Ruční správa cookies | Obvykle řešeno | Řešeno automaticky |
| Údržba | Vysoká (selectory se lámou) | Nízká (provider udržuje) | Žádná (AI se přizpůsobí) |
| Stránkování | Nutný vlastní kód | Vestavěné | Vestavěné |
| Podpora více zemí | Samostatné session pro každou doménu | Obvykle ano | Přes prohlížeč = vaše locale |
| Sentiment analýza | Musíte dopsat sami | Někdy součástí | Export do Sheets, analýza kdekoliv |
| Nejlepší pro | Učení, plná kontrola | Produkční pipeline ve velkém | Rychlý sběr dat, netechnické týmy |
Python vám dá úplnou kontrolu a je to opravdu nejlepší způsob, jak pochopit, co se děje pod kapotou. Placené API (ScrapingBee, Oxylabs, Bright Data) dávají smysl u produkčních pipeline, kde je důležitější uptime než cena. A pro týmy, které potřebují data z recenzí bez vývojářského overheadu — ecommerce ops sledující konkurenci týdně, marketingové týmy sbírající zákaznický jazyk pro copy — existuje třetí cesta.
Jak scrapovat Amazon recenze pomocí Thunderbit (bez kódu, bez údržby)
Thunderbit jsme postavili přesně pro situace, kdy je údržba Python scraperu zbytečně komplikovaná. Workflow vypadá takto:
- Nainstalujte Thunderbit Chrome Extension
- Otevřete stránku s recenzemi produktu Amazonu v prohlížeči (už jste přihlášení, takže přihlašovací brána nevadí)
- Klikněte na „AI Suggest Fields“ — Thunderbit si stránku přečte a navrhne sloupce jako Author, Rating, Title, Review Text, Date, Verified Purchase
- Klikněte na „Scrape“ — data se hned vytáhnou i s vestavěným stránkováním
- Exportujte do Excelu, Google Sheets, Airtable nebo Notion
Hlavní výhoda je, že Thunderbitova AI při každém spuštění čte strukturu stránky znovu. Žádné CSS selektory na údržbu, žádné cookies k ruční správě, žádný anti-bot kód. Když Amazon změní HTML, AI se přizpůsobí. Pro čtenáře, kteří chtějí programový přístup bez plného DIY, nabízí Thunderbit i Extract API — strukturovanou extrakci dat přes API s AI detekcí polí a bez údržby selektorů.
Pro hlubší práci s daty z Amazonu se podívejte na naše návody jak scrapovat produkty a recenze z Amazonu a jak extrahovat a analyzovat prodejní data z Amazonu.
Tipy pro scrapování Amazon recenzí ve velkém s Pythonem
Pokud scrapujete recenze napříč mnoha ASINy, pár návyků vám ušetří spoustu starostí:
- Dávkujte ASINy a mezi produkty dělejte prodlevy, nejen mezi stránkami. Já používám pauzy 10–15 sekund mezi ASINY.
- Agresivně deduplikujte. Při kombinování více filtrů hvězdiček a řazení se budou recenze překrývat. Jako dedup klíč použijte tuple
(title, author, date). - Logujte selhání. Sledujte, které kombinace ASIN + stránka + filtr selhaly, abyste je mohli zopakovat bez nového scrapování všeho.
- U velkých projektů ukládejte do databáze. Jednoduchá SQLite databáze škáluje mnohem lépe než stále rostoucí CSV soubory:
import sqlite3
conn = sqlite3.connect("reviews.db")
df.to_sql("reviews", conn, if_exists="append", index=False)
- Plánujte opakované scrape. Pro průběžný monitoring nastavte cron job nebo použijte funkci Scheduled Scraper v Thunderbit — popíšete URL a rozvrh a zbytek běží bez serveru.
Pro další přístupy se podívejte na naše články nejlepší automatizované web scraping nástroje a jak scrapovat data z webů do Excelu, kde najdete další možnosti.
Krátká poznámka k právním a etickým otázkám
Amazon ve svých Conditions of Use výslovně zakazuje „použití jakéhokoli robota, spideru, scraperu nebo jiných automatizovaných prostředků k přístupu ke službám Amazonu“. Na druhou stranu nedávná americká judikatura je ke scraperům veřejně dostupných dat příznivá. V případu Meta Platforms v. Bright Data (leden 2024) federální soud rozhodl, že scraping veřejně dostupných dat neporušuje podmínky služby, pokud scraper není přihlášeným „uživatelem“.
Důležitý detail: scraping za přihlášením (což je i případ tohoto návodu) vás přesouvá do roviny smluvního práva, protože jste při založení účtu odsouhlasili ToS Amazonu. Scrapování veřejně viditelných featured reviews s sebou nese menší právní riziko než scraping za přihlašovací bránou.
Praktická doporučení: nerepublikujte scrapovaná data komerčně, nesbírejte osobní údaje nad rámec toho, co je veřejně zobrazené, respektujte robots.txt a u rozsáhlého nebo komerčního použití se poraďte s právníkem. Nejde o právní radu. Více o právním rámci najdete v našem přehledu právních dopadů web scrapingu.
Závěr: Scrapujte Amazon recenze v Pythonu, nebo kód přeskočte úplně
Rychlé shrnutí toho, co jsme prošli:
- Přihlašovací brána je reálná, ale řešitelná autentizací přes cookies — zkopírujte 7 cookies z prohlížeče a vložte je do
requests.Session() - Pro extrakci používejte selektory
data-hook, ne CSS třídy, jinak se vám to bude každých pár týdnů rozpadat - Kombinujte filtry hvězdiček a řazení, abyste obešli limit 10 stran a dostali se na 500+ recenzí na produkt
- Přidejte sentiment analýzu přes TextBlob pro rychlý základ, nebo Hugging Face Transformers pro produkční přesnost
- Udržujte obranu proti botům: throttling, rotaci User-Agentů, exponenciální backoff a residential proxy ve větším měřítku
Python vám dá plnou kontrolu a je nejlepší způsob, jak pochopit, co se děje pod kapotou. Ale pokud je váš use case spíš „potřebuji do pátku dostat recenze konkurence do tabulky“ než „chci postavit produkční datovou pipeline“, pak nemusí být údržba vlastního scraperu výhodná.
Thunderbit řeší autentizaci, selektory, stránkování i export na pár kliknutí — vyzkoušejte free tier a uvidíte, jestli vám sedne do workflow. Jak Amazon dál zpřísňuje anti-bot opatření, AI nástroje, které se přizpůsobují v reálném čase, se stávají méně „nice to have“ a více nutností.
Můžete si také projít náš Thunderbit YouTube Channel pro video návody k scraping workflow.
Časté dotazy
1. Dá se Amazon recenze scrapovat bez přihlášení?
Ano, ale jen zhruba 8 „featured reviews“ zobrazených na produktové stránce (/dp/{ASIN}/). Plné stránky s řazením, filtrováním a stránkováním vyžadují od konce roku 2024 autentizaci. Pro většinu firemních use case budete muset řešit přihlašovací bránu.
2. Je scrapování Amazon recenzí legální?
Podmínky Amazonu automatizované scrapování zakazují. Nicméně nedávná americká judikatura (Meta v. Bright Data, 2024; hiQ v. LinkedIn) podporuje scraping veřejně dostupných dat. Scrapování za přihlášením s sebou nese vyšší právní riziko, protože jste odsouhlasili podmínky Amazonu. Pro komerční použití se poraďte s právníkem.
3. Kolik Amazon recenzí mohu na produkt scrapovat?
Amazon omezuje recenzní stránky na 10 na každou kombinaci řazení a filtru hvězdiček. Při použití všech 5 filtrů hvězdiček × 2 řazení se dostanete až na 100 stran, tedy zhruba 1 000 recenzí na produkt. S keyword filtry je teoretický strop vyšší, i když s výraznou duplicitou.
4. Jaká je nejlepší Python knihovna pro scrapování Amazon recenzí?
requests + BeautifulSoup pro parsování statického HTML je nejběžnější a nejspolehlivější kombinace. Selenium se hodí, když je potřeba renderování JavaScriptem. Pro no-code alternativu, která automaticky řeší přihlašovací bránu i stránkování, vyzkoušejte Thunderbit.
5. Jak se vyhnout blokaci při scrapování Amazonu?
Rotujte User-Agent řetězce z poolu 10+ reálných browser stringů, přidávejte náhodné prodlevy 2–5 sekund mezi požadavky, implementujte exponenciální backoff pro chyby 503/429, používejte residential proxy ve větším měřítku (datacentrové IP jsou předem blokované) a udržujte konzistentní session cookies napříč požadavky. Pro přístup bez údržby řeší Thunderbit obranu proti botům automaticky přes vaši browser session.
Zjistěte více


