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

Naposledy aktualizováno April 16, 2026

Můj skript na stahování recenzí z Amazonu běžel šest týdnů bez jediné chyby — 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 v tom sami. Koncem roku 2025 začal Amazon schovávat celé stránky s recenzemi za přihlašovací bránu a spousta Python scrapingových skriptů přestala ze dne na den fungovat. Posledních pár měsíců jsem v řešil tenhle problém ze dvou stran — vyvíjel jsem náš AI scraper a zároveň si udržoval vlastní Python pipeline na recenze — takže jsem si řekl, že je čas sepsat průvodce, který bych tehdy sám potřeboval. Tenhle článek popisuje funkční postup: autentizaci přes cookies, stabilní selektory odolné vůči Amazonovu maskování CSS, obejití desetistránkového limitu stránkování, obranu proti botům a navrch i sekci o analýze sentimentu, která surové texty recenzí promění v reálné obchodní poznatky. A pokud si v půlce řeknete „tohle se mi fakt nechce celé udržovat v kódu“, ukážu vám, jak to zvládne asi za dvě minuty a bez jediného řádku Pythonu.

Co je sběr recenzí z Amazonu a proč na něm záleží?

Sběr recenzí z Amazonu znamená programové získávání zákaznických dat z recenzí — 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 (a nikdy ho nevrátil), je web scraping jediná programová cesta, jak se k těmto datům dostat.

Čísla to potvrzují. a . Zobrazení pouhých 5 recenzí na produktové stránce může . Firmy, které systematicky analyzují sentiment v recenzích, zaznamenávají . Tohle není abstraktní datová věda — je to konkurenční zpravodajství, signály pro vylepšení produktu a marketingový jazyk, to vše napsané černé na bílém na serverech Amazonu.

Proč sbírat recenze z Amazonu v Pythonu

Python je pro tenhle typ práce pořád jasná volba. Je to a jeho ekosystém — requests, BeautifulSoup, pandas, Scrapy — dělá web scraping dostupný i lidem, kteří nejsou full-time vývojáři.

Různé týmy ta data využívají různě:

TýmPřípad použitíCo extrahují
Produkt / R&DOdhalení opakujících se stížností, určování priorit opravText 1–2hvězdičkových recenzí, četnost klíčových slov
ObchodSledování sentimentu u konkurenčních produktůHodnocení, trendy objemu recenzí
MarketingVyhledání zákaznického jazyka pro reklamní textyPozitivní fráze z recenzí, zmínky o funkcích
Ecommerce OperationsSledování sentimentu vlastních produktů v časeRozložení hvězdiček, podíl ověřených nákupů
Průzkum trhuPorovnání lídrů v kategorii napříč funkcemiDatové sady recenzí pro více ASINů

Jedna značka kuchyňského náčiní , produkt přepracovala a do 60 dnů získala zpět pozici #1 Best Seller. Firma vyrábějící fitness náramky , odhalila problém s alergií na latex, uvedla hypoalergenní variantu a snížila vracení zboží o 40 %. Přesně taková návratnost dělá z té technické práce smysluplnou investici.

Přihlašovací brána: proč váš scraper na Amazon recenze přestal fungovat

  1. listopadu 2024 . Změnu potvrdily jak , tak . Když si v anonymním okně otevřete /product-reviews/{ASIN}/, přesměruje vás to na přihlašovací stránku místo dat s recenzemi.

python-web-scraping-diagram.webp

Příznaky jsou zrádné: skript dostane odpověď 200 OK, ale HTML tělo 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 navíc nekonzistentní — někdy se v čerstvě otevřeném okně pár recenzí načte, než se brána aktivuje, hlavně na první stránce — ale u jakéhokoli scraperu ve větším měřítku je potřeba počítat s tím, že brána je aktivní pořád.

Jednotlivé domény Amazonu podle zemí (.de, .co.uk, .co.jp) vynucují přihlašování samostatně. Jak napsal jeden uživatel na fóru: „pro každou zemi je potřeba samostatné přihlášení“. Cookies z .com vám na .co.uk fungovat nebudou.

Produktové stránky Amazonu (/dp/{ASIN}/) stále zobrazují přibližně i bez autentizace. Amazon je vybírá algoritmem ručně nebo poloručně a hodí se pro rychlou kontrolu sentimentu, ale nejdou řadit, filtrovat ani stránkovat.

Plné stránky recenzí (/product-reviews/{ASIN}/) — seřazení od nejnovějších, filtrování podle hvězdiček a stránkování přes stovky recenzí — už vyžadují přihlášení.

Když potřebujete jen pár recenzí na rychlý orientační odhad, stačí produktová stránka. Pro stovky nebo tisíce recenzí je ale potřeba řešit autentizaci.

Co potřebujete, než začnete: Python a knihovny

Než napíšeme jediný řádek kódu, tady je příprava:

  • Obtížnost: středně pokročilá (orientace v Pythonu, základní znalost HTML)
  • Časová náročnost: cca 45 minut pro celý pipeline; cca 10 minut pro základní scrape
  • Co budete potřebovat: Python 3.8+, prohlížeč Chrome, platný účet Amazonu

Nainstalujte základní knihovny:

1pip install requests beautifulsoup4 lxml pandas textblob

Volitelně (pro pokročilou analýzu sentimentu):

1pip install transformers torch

Co je ASIN? Je to desetiznakový identifikátor produktu na 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 pro recenze.

Krok 1: Projděte přihlašovací bránou pomocí autentizace přes cookies

Nejspolehlivější postup je přihlásit se do Amazonu 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.

Potřebujete těchto sedm cookies:

Název cookieÚčel
session-idPrůběžně se měnící identifikátor relace
session-id-timeČasové razítko relace
session-tokenPrůběžně rotující token relace
ubid-mainIdentifikátor prohlížení uživatele
at-mainHlavní autentizační token
sess-at-mainAutentizace v rámci relace
x-mainIdentifikátor navázaný na e-mail uživatele

Jak vytáhnout cookies z Chrome DevTools

  1. Přihlaste se do amazon.com v Chrome
  2. Otevřete DevTools (F12 nebo klik pravým tlačítkem → Inspect)
  3. Jděte na ApplicationStorageCookieshttps://www.amazon.com
  4. Najděte v tabulce každé uvedené cookie a zkopírujte její hodnotu
  5. Naformátujte je jako řetězec oddělený středníky pro Python

Session nastavte takto:

1import requests
2session = requests.Session()
3# Sem vložte hodnoty vašich cookies
4cookies = {
5    "session-id": "YOUR_SESSION_ID",
6    "session-id-time": "YOUR_SESSION_ID_TIME",
7    "session-token": "YOUR_SESSION_TOKEN",
8    "ubid-main": "YOUR_UBID_MAIN",
9    "at-main": "YOUR_AT_MAIN",
10    "sess-at-main": "YOUR_SESS_AT_MAIN",
11    "x-main": "YOUR_X_MAIN",
12}
13headers = {
14    "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",
15    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
16    "Accept-Language": "en-US,en;q=0.5",
17}
18session.cookies.update(cookies)
19session.headers.update(headers)

Důležité: Používejte stejný objekt session pro všechny požadavky. Cookies tak zůstanou konzistentní a chování bude připomínat skutečnou relaci v prohlížeči. Cookies obvykle vydrží dny až týdny při scrapingové zátěži, ale jakmile se znovu začnete přesměrovávat na přihlášení, obnovte je z prohlížeče.

U tržišť 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é tržiště potřebuje vlastní samostatnou relaci.

Krok 2: Sestavte požadavek a parsujte HTML recenzí pomocí BeautifulSoup

URL pro recenze Amazonu vypadá takto:

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

Jádro funkce:

1from bs4 import BeautifulSoup
2import time, random
3def get_soup(session, url):
4    time.sleep(random.uniform(2, 5))  # slušná prodleva
5    response = session.get(url, timeout=15)
6    # Detekce přihlašovací brány
7    if "ap_email" in response.text or "Amazon Sign-In" in response.text:
8        raise Exception("Detekována přihlašovací brána — obnovte cookies")
9    if response.status_code != 200:
10        raise Exception(f"HTTP {response.status_code}")
11    return BeautifulSoup(response.text, "lxml")

Pomáhá i malý trik: než otevřete stránku s recenzemi, navštivte nejdřív produktovou stránku. V relaci to vytvoří přirozenější vzorec chování.

1# Nejprve navštivte produktovou stránku (napodobí běžné prohlížení)
2product_url = f"https://www.amazon.com/dp/{asin}"
3session.get(product_url, timeout=15)
4time.sleep(random.uniform(1, 3))
5# Potom otevřete stránku s recenzemi
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)

Krok 3: Použijte stabilní selektory pro získání dat z recenzí (spoléhejte na data-hook, ne na CSS třídy)

Tady většina návodů z let 2022–2023 selhává. Amazon maskuje názvy CSS tříd — pravidelně se mění a jak si jeden frustrovaný vývojář stěžoval ve fóru: „neměli ani jediný vzor v názvech tříd u 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í frontend Amazonu, takže se nenechávají náhodně měnit.

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é)
Titulek recenze[data-hook="review-title"].review-title (někdy)
Jméno autoraspan.a-profile-nameRelativně stabilní
Datum recenze[data-hook="review-date"].review-date (závislé na regionu)
Ověřený nákup[data-hook="avp-badge"]span.a-size-mini

Kód pro extrakci pomocí selektorů 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        # Hvězdičkové hodnocení
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        # Titulek
15        title_el = div.select_one('[data-hook="review-title"]')
16        title = title_el.get_text(strip=True) if title_el else ""
17        # Tělo recenze
18        body_el = div.select_one('[data-hook="review-body"]')
19        body = body_el.get_text(strip=True) if body_el else ""
20        # Autor
21        author_el = div.select_one('span.a-profile-name')
22        author = author_el.get_text(strip=True) if author_el else ""
23        # Datum a země
24        date_el = div.select_one('[data-hook="review-date"]')
25        date_text = date_el.get_text(strip=True) if date_el else ""
26        # Formát: "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        # Ověřený nákup
32        verified_el = div.select_one('[data-hook="avp-badge"]')
33        verified = bool(verified_el)
34        reviews.append({
35            "author": author,
36            "rating": rating,
37            "title": title,
38            "content": body,
39            "date": date,
40            "country": country,
41            "verified": verified,
42        })
43    return reviews

Tenhle výběr selektorů používám proti několika ASINům už měsíce a atributy data-hook se ani jednou nezměnily. Zato CSS třídy se za stejnou dobu otočily už nejméně dvakrát.

Krok 4: Ošetřete stránkování a desetistránkový limit Amazonu

Amazon omezuje parametr pageNumber na 10 stránek po 10 recenzích — tvrdý strop zhruba 100 recenzí pro jednu kombinaci filtrů. Tlačítko „Next page“ po desáté stránce prostě zmizí.

Základní smyčka pro stránkování:

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  # Na této stránce už nejsou žádné další recenze
8    all_reviews.extend(page_reviews)
9    print(f"Stránka {page}: {len(page_reviews)} recenzí")

Jak získat víc než 10 stránek recenzí z Amazonu

Řešení je rozdělení do filtrů. Každá kombinace filterByStar a sortBy má vlastní nezávislé 10stránkové okno.

Hodnoty hvězdičkového filtru: one_star, two_star, three_star, four_star, five_star
Hodnoty řazení: recent, helpful (výchozí)

Když zkombinujete všech 5 hvězdičkových filtrů × 2 způsoby řazení, dostanete až 100 stran, tedy 1 000 recenzí na produkt — a u produktů s nerovnoměrným rozložením hodnocení se často dostanete velmi blízko kompletní sadě recenzí.

1star_filters = ["one_star", "two_star", "three_star", "four_star", "five_star"]
2sort_orders = ["recent", "helpful"]
3all_reviews = []
4seen_titles = set()  # jednoduchá deduplikace
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                # Deduplikace podle kombinace titulu a autora
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}] Stránka {page}: {len(page_reviews)} recenzí")
23print(f"Celkem unikátních recenzí: {len(all_reviews)}")

Mezi jednotlivými bloky budou překryvy, takže deduplikace je zásadní. Jako rychlý klíč používám kombinaci titulu recenze + jména autora — není to dokonalé, ale zachytí naprostou většinu duplicit.

Krok 5: Vyhněte se ochraně proti botům (rotace, zpomalení, retry)

Amazon používá AWS WAF Bot Control a ten je dnes mnohem agresivnější. Jednovrstvá ochrana typu „jen rotovat User-Agent“ nebo „jen přidat prodlevu“ už nestačí.

TechnikaImplementace
Rotace User-AgentůNáhodný výběr z 10+ reálných browser stringů
Exponenciální backoffZpoždění opakování 2 s → 4 s → 8 s při 503
Omezování požadavkůrandom.uniform(2, 5) sekund mezi stránkami
Rotace proxyStřídání rezidenčních proxy
Otisk relaceKonzistentní cookies + hlavičky pro jednu relaci
TLS impersonaceV produkci použít curl_cffi místo standardního requests

Retry wrapper připravený pro produkci:

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            # Detekce blokace
16            if "validateCaptcha" in response.url or "Robot Check" in response.text:
17                wait = (2 ** attempt) * 5
18                print(f"Detekována CAPTCHA. Čekám {wait} s...")
19                time.sleep(wait)
20                continue
21            if response.status_code in (429, 503):
22                wait = (2 ** attempt) * 2
23                print(f"Rate limit ({response.status_code}). Čekám {wait} s...")
24                time.sleep(wait)
25                continue
26            if "ap_email" in response.text:
27                raise Exception("Přihlašovací brána — cookies vypršely")
28            return BeautifulSoup(response.text, "lxml")
29        except Exception as e:
30            if attempt == max_retries - 1:
31                raise
32            print(f"Pokus {attempt + 1} selhal: {e}")
33    return None

Poznámka k proxy: Amazon (AWS, GCP, Azure, DigitalOcean) už na úrovni sítě. Pokud scrapujete víc než pár stovek stránek, jsou rezidenční proxy v podstatě nutnost — počítejte s cenou 50–200+ USD měsíčně podle objemu. U menších projektů (pod 100 požadavků denně) často stačí opatrné zpomalení z domácí IP adresy.

Amazon navíc kontroluje TLS fingerprint. Standardní knihovna Python requests. Pro produkční scrapers zvažte curl_cffi, který se tváří jako reálný browser TLS stack. Pro tutorialové objemy (pár stovek stránek) obvykle stačí requests s dobrými hlavičkami.

Krok 6: Exportujte stažené recenze z Amazonu do CSV nebo Excelu

Jakmile máte recenze stažené, je jejich uložení do použitelného formátu s pandas jednoduché:

1import pandas as pd
2df = pd.DataFrame(all_reviews)
3df.to_csv("amazon_reviews.csv", index=False)
4print(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 tu cenuDělá vše, co potřebuji, jen drobné zpoždění u náročných aplikací...March 10, 2025the United StatesFalse

Pro export do Excelu použijte: df.to_excel("amazon_reviews.xlsx", index=False) (vyžaduje openpyxl).

Pro Google Sheets funguje knihovna gspread, ale vyžaduje — vytvořit projekt, povolit dvě API, vygenerovat service account credentials, sdílet tabulku. Pokud vám to připadá jako víc nastavování než samotný scraping, nemýlíte se. (To je přesně ten moment, kdy začíná být nástroj jako , který exportuje do Google Sheets jedním kliknutím, hodně lákavý.)

Bonus: Přidejte do stažených recenzí analýzu sentimentu v 5 řádcích Pythonu

Většina návodů na scraping končí exportem do CSV. Jenže teprve skórování sentimentu promění syrová data v obchodní rozhodnutí.

Nejrychlejší základ je TextBlob:

1from textblob import TextBlob
2df["sentiment"] = df["content"].apply(lambda x: TextBlob(str(x)).sentiment.polarity)

Dostanete tím 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še, co potřebuji, jen drobné zpoždění..."4.00.25
"Naprostý odpad. Hned vráceno."1.0-0.75
"Je to v pohodě. Nic extra, ale funguje."3.00.10

Nejzajímavější jsou nesoulady — třeba tříhvězdičková recenze s pozitivním textem nebo pětihvězdičková recenze s negativním jazykem. Tyhle rozdíly často odhalí jemnější názor zákazníka, který samotné hvězdičky neukážou.

ai-review-analysis.webp

Pro přesnost na produkční úrovni se doporučují Hugging Face Transformers. a oproti lexikálním nástrojům. Model nlptown/bert-base-multilingual-uncased-sentiment dokonce umí přímo předpovědět hodnocení 1–5 hvězdiček:

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)

Recenze na Amazonu mají — velký vrchol u 5 hvězdiček, menší vrchol u 1 hvězdičky a propad uprostřed. To znamená, že průměrné hodnocení je často špatný ukazatel skutečné kvality produktu. Zaměřte se na shluk 1hvězdičkových recenzí a hledejte opakující se témata — právě tam obvykle leží jedna opravitelná závada.

Upřímné srovnání: DIY Python vs. placené scraping API vs. Thunderbit

Spravoval jsem Python scrapers pro Amazon a řeknu to na rovinu: rozbíjejí se. Selektory se mění, cookies expirují, Amazon nasadí novou vrstvu detekce botů a najednou vaše sobotní dopoledne místo analýzy dat zabere ladění scraperu. Uživatelé na fórech popisují stejnou frustraci — vlastní skripty, které „fungovaly minulý měsíc“, je teď potřeba neustále opravovat.

Takhle vypadají hlavní tři přístupy vedle sebe:

KritériumDIY Python (BS4/Selenium)Placené scraping APIThunderbit (bez kódu)
Čas na nastavení1–3 hodiny30 min (API klíč)2 minuty
NákladyZdarma (+ proxy)50–200+ USD/měsícK dispozici zdarma v rámci free tieru
Řešení přihlašovací brányRuční správa cookiesObvykle řešenoAutomaticky řešeno
ÚdržbaVysoká (selektory se lámou)Nízká (spravuje poskytovatel)Žádná (AI se přizpůsobuje)
StránkováníNutný vlastní kódVestavěnéVestavěné
Podpora více zemíSamostatné relace pro každou doménuObvykle podporovánoPřes prohlížeč = vaše lokalita
Analýza sentimentuDopíšete si vlastní kódNěkdy v ceněExport do Sheets, analýza kdekoli
Nejlepší proUčení, plná kontrolaŠkálování, produkční pipelineRychlý sběr dat, netechnické týmy

Python vám dá plnou kontrolu a je skvělý způsob, jak pochopit, co se děje pod kapotou. Placená API (ScrapingBee, Oxylabs, Bright Data) dávají smysl pro produkční pipeline, kde je důležitější dostupnost než cena. A pro týmy, které potřebují recenze bez režie vývoje — například ecommerce tým sledující konkurenty jednou týdně nebo marketingový tým sbírající zákaznický jazyk pro reklamy — existuje třetí cesta.

Jak scrapovat recenze Amazonu s Thunderbit (bez kódu, bez údržby)

jsme postavili přesně pro situace, kdy je údržba Python scraperu zbytečně složitá. Postup vypadá takto:

  1. Nainstalujte
  2. Otevřete v prohlížeči stránku s recenzemi produktu Amazonu (už jste přihlášení, takže přihlašovací brána nevadí)
  3. Klikněte na „AI Suggest Fields“ — Thunderbit přečte stránku a navrhne sloupce jako Author, Rating, Title, Review Text, Date, Verified Purchase
  4. Klikněte na „Scrape“ — data se vytáhnou okamžitě, včetně vestavěného stránkování
  5. Exportujte do Excelu, Google Sheets, Airtable nebo Notion

Hlavní výhoda je v tom, že Thunderbitova AI čte strukturu stránky pokaždé znovu. Žádné CSS selektory na údržbu, žádná správa cookies, žá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 kompletní vlastní implementace, Thunderbit nabízí i — strukturovanou extrakci dat přes API s AI detekcí polí, bez údržby selektorů.

Pro hlubší pohled na data z Amazonu se podívejte i na naše průvodce a .

Tipy pro sběr recenzí z Amazonu ve velkém pomocí Pythonu

Pokud scrapujete recenze napříč mnoha ASINy, pár návyků vám ušetří spoustu starostí:

  • Dávkujte ASINy a dělejte prodlevy mezi produkty, nejen mezi stránkami. Já používám pauzy 10–15 sekund mezi jednotlivými ASINy.
  • Deduplikujte agresivně. Při kombinování více hvězdičkových filtrů a režimů řazení se recenze překrývají. Jako dedup klíč používejte tuple (title, author, date).
  • Logujte chyby. Sledujte, které kombinace ASIN + stránka + filtr selhaly, abyste je mohli zopakovat bez nutnosti znovu stahovat všechno.
  • Ukládejte data do databáze u větších projektů. Jednoduchá SQLite databáze škáluje mnohem lépe než narůstající CSV soubory:
1import sqlite3
2conn = sqlite3.connect("reviews.db")
3df.to_sql("reviews", conn, if_exists="append", index=False)
  • Plánujte opakované scrapingy. Pro průběžné monitorování si nastavte cron job nebo použijte funkci Scheduled Scraper v Thunderbit — popíšete URL a rozvrh a vše ostatní vyřeší bez serveru.

Další postupy najdete v našich článcích a , které pokrývají další možnosti.

Krátká poznámka k právu a etice

Podmínky používání Amazonu výslovně zakazují „používání robotů, spiderů, scraperů nebo jiných automatizovaných prostředků pro přístup ke službám Amazonu“. Na druhou stranu je poslední americká judikatura vůči scraperům veřejných dat spíše příznivá. V kauze federální soud rozhodl, že scraping veřejně přístupných dat neporušuje podmínky služby, pokud scraper není přihlášený „uživatel“.

Je tu ale důležitý rozdíl: scraping za přihlášením, což je i případ tohoto návodu, vás posouvá do roviny smluvního práva, protože jste souhlasili s podmínkami Amazonu při vytvoření účtu. Sběr veřejně viditelných featured reviews je z hlediska práva méně rizikový než scraping za přihlašovací bránou.

Praktická doporučení: nešířte stažená data komerčně, nesbírejte osobní údaje uživatelů nad rámec toho, co je veřejně zobrazené, respektujte robots.txt a při velkém nebo komerčním využití se poraďte s právníkem. Nejde o právní radu. Více k této problematice najdete v našem přehledu .

Závěr: scrapujte recenze Amazonu v Pythonu, nebo kód úplně přeskočte

Rychlé shrnutí toho, co jsme si prošli:

  • Přihlašovací brána je reálná, ale dá se obejít pomocí autentizace 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, které se lámou každých pár týdnů
  • Kombinujte hvězdičkové filtry a způsoby řazení, abyste obešli desetistránkový limit stránkování a dostali se na 500+ recenzí na produkt
  • Přidejte analýzu sentimentu přes TextBlob jako rychlý základ nebo Hugging Face Transformers pro přesnost na produkční úrovni
  • Držte se obrany proti botům: throttling, rotace User-Agentů, exponenciální backoff a pro škálování rezidenční proxy

Python vám dá plnou kontrolu a je nejlepší cestou, jak pochopit, co se děje pod kapotou. Ale pokud je váš use case spíš „potřebuji do pátku mít recenze konkurence v tabulce“ než „chci postavit produkční datovou pipeline“, možná za to udržování vlastního scraperu nestojí.

řeší autentizaci, selektory, stránkování i export na pár kliknutí — vyzkoušejte a zjistěte, jestli vám sedí do workflow. Jak Amazon dál zpřísňuje ochranu proti botům, AI nástroje, které se přizpůsobují v reálném čase, se z příjemného bonusu mění v nutnost.

Můžete se také podívat na náš , kde najdete video návody ke scrapingovým workflow.

Často kladené otázky

1. Dá se sbírat Amazon recenze bez přihlášení?

Ano, ale jen zhruba těch 8 „featured reviews“, které jsou zobrazené na produktové stránce (/dp/{ASIN}/). Plné stránky recenzí se řazením, filtrováním a stránkováním vyžadují od konce roku 2024 autentizaci. Pro většinu firemních použití budete muset přihlašovací bránu řešit.

2. Je sběr recenzí z Amazonu legální?

Podmínky Amazonu automatizovaný scraping zakazují. Nicméně nedávná judikatura v USA (Meta v. Bright Data, 2024; hiQ v. LinkedIn) podporuje sběr veřejně dostupných dat. Scraping za přihlášením s sebou nese vyšší právní riziko, protože jste souhlasili s podmínkami Amazonu. Pro komerční použití se poraďte s právníkem.

3. Kolik recenzí z Amazonu můžu na jeden produkt získat?

Amazon omezuje recenzní stránky na 10 stránek pro každou kombinaci řazení a hvězdičkového filtru. Když použijete všech 5 hvězdičkových filtrů × 2 způsoby řazení, dostanete až 100 stránek (zhruba 1 000 recenzí) na produkt. S filtrem podle klíčových slov je teoretický strop vyšší, ale s výraznou duplicitou.

4. Jaká je nejlepší Python knihovna pro sběr recenzí z Amazonu?

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í přes JavaScript. Jako no-code alternativu, která zvládá přihlašovací brány i stránkování automaticky, zkuste .

5. Jak se při sběru dat z Amazonu vyhnout blokaci?

Rotujte User-Agenty z poolu 10+ reálných browser stringů, přidejte náhodné prodlevy 2–5 sekund mezi požadavky, implementujte exponenciální backoff pro chyby 503/429, při větším objemu používejte rezidenční proxy (datacentrové IP jsou předblokované) 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.

Více informací

Obsah

Vyzkoušej Thunderbit

Sbírej leady i další data jen na 2 kliknutí. Poháněno AI.

Získat Thunderbit Je to zdarma
Extrahuj data pomocí AI
Snadno přenes data do Google Sheets, Airtable nebo Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week