Jak v Pythonu stahuji recenze z Amazonu (i za přihlašovací bránou)

Naposledy aktualizováno August 21, 2026
Jak v Pythonu stahuji recenze z Amazonu (i za přihlašovací bránou)

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ýmPoužitíCo získávají
Produkt / R&DHledání opakujících se stížností, prioritizace opravText 1–2hvězdičkových recenzí, četnost klíčových slov
ObchodSledování sentimentu u konkurenčních produktůHodnocení, trendy v objemu recenzí
MarketingVyhledání zákaznického jazyka pro copyPozitivní fráze z recenzí, zmínky o funkcích
Ecommerce opsSledování sentimentu vlastních produktů v časeRozložení hvězdiček, poměr ověřených nákupů
Průzkum trhuPorovná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

  1. 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.

python-web-scraping-diagram.webp

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-idRotující identifikátor relace
session-id-timeČasová značka relace
session-tokenRotující token relace
ubid-mainIdentifikátor prohlížení uživatele
at-mainPrimární ověřovací token
sess-at-mainOvěření v rámci relace
x-mainIdentifikátor navázaný na e-mail uživatele

Jak získat cookies z Chrome DevTools

  1. Přihlaste se na amazon.com v Chromu
  2. Otevřete DevTools (F12 nebo klik pravým → Inspect)
  3. Přejděte na ApplicationStorageCookieshttps://www.amazon.com
  4. V tabulce najděte každou cookie a zkopírujte její hodnotu
  5. 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 recenzeStabilní 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 autoraspan.a-profile-namePomě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čí.

TechnikaImplementace
Rotace User-AgentůNáhodný výběr z 10+ reálných browser stringů
Exponenciální backoffZpoždění retry 2s → 4s → 8s při 503
Throttling požadavkůrandom.uniform(2, 5) sekund mezi stránkami
Rotace proxyStřídání residential proxy
Otisk sessionKonzistentní cookies + hlavičky pro jednu session
TLS impersonaceV 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 requestszná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:

authorratingtitlecontentdatecountryverified
Sarah M.5.0Nejlepší nákup rokuBaterie vydrží celý den, displej je nádherný...January 15, 2025the United StatesTrue
Mike T.2.0Zklamání po 2 týdnechNabíjecí port přestal fungovat...February 3, 2025the United StatesTrue
Priya K.4.0Skvělá hodnota za ty penízeDělá všechno, co potřebuji, jen občas laguje u náročných aplikací...March 10, 2025the United StatesFalse

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)ratingsentiment
"Baterie vydrží celý den, displej je nádherný..."5.00.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.00.25
"Absolutní odpad. Okamžitě vráceno."1.0-0.75
"Ujde to. Nic extra, ale funguje."3.00.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í.

ai-review-analysis.webp

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ériumDIY Python (BS4/Selenium)Placené scraping APIThunderbit (no-code)
Čas na nastavení1–3 hodiny30 min (API klíč)2 minuty
NákladyZdarma (+ proxy)50–200+ USD/měsícK dispozici free tier
Řešení přihlašovací brányRuční správa cookiesObvykle řešenoŘešeno automaticky
ÚdržbaVysoká (selectory se lámou)Nízká (provider udržuje)Žádná (AI se přizpůsobí)
StránkováníNutný vlastní kódVestavěnéVestavěné
Podpora více zemíSamostatné session pro každou doménuObvykle anoPřes prohlížeč = vaše locale
Sentiment analýzaMusíte dopsat samiNěkdy součástíExport do Sheets, analýza kdekoliv
Nejlepší proUčení, plná kontrolaProdukční pipeline ve velkémRychlý 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:

  1. Nainstalujte Thunderbit Chrome Extension
  2. 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í)
  3. 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
  4. Klikněte na „Scrape“ — data se hned vytáhnou i s vestavěným stránkováním
  5. 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

Fawad Khan
Fawad Khan
Fawad se psaním živí a upřímně ho to docela baví. Roky zjišťoval, co dělá text zapamatovatelným — a co čtenáře přiměje scrollovat dál. Zeptejte se ho na marketing a bude o něm mluvit celé hodiny. Zeptejte se ho na carbonaru a bude mluvit ještě déle.
Obsah
Thunderbit · AI agent pro webová data

Extrahuj data z libovolné stránky za 1 kliknutí

Důvěřuje mu více než 250 000 uživatelů
k dispozici bezplatný plán
Z webové stránky do tabulky
Popiš, co potřebuješ — AI agent Thunderbit to nasbírá a exportuje do Excelu, Google Sheets, Airtable nebo Notion. Začni zdarma.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week