Pokud jsi někdy následoval návod na scrapovat produkty z Amazonu pomocí pythonu a skončil jsi jen na zdi CAPTCHA, chybách 503 nebo úplně prázdných výsledcích — vítej v klubu. Většina Python průvodců pro Amazon scraping, které kolují po internetu, vznikla v roce 2022 nebo 2023 a používá selektory i postupy, které Amazon už dávno opravil.
V Thunderbit už roky vyvíjím nástroje pro extrakci dat a z vlastní zkušenosti ti řeknu jednu věc: Amazon patří mezi nejtěžší weby, které lze spolehlivě scrapovat. Platforma neustále mění HTML strukturu, nasazuje šestivrstvou ochranu proti botům a dokonce zobrazuje různá rozložení stránky různým uživatelům v rámci A/B testů. V tomhle návodu tě provedu Python Amazon scraperem, který skutečně funguje v roce 2025 — s ověřenými CSS selektory, vícevrstvou strategií proti blokování a postupy pro plánování a export, které většina tutoriálů úplně vynechává. A pro každého, kdo potřebuje hlavně data a nechce se prát s Pythonem, ukážu i to, jak to samé zvládne přibližně na dvě kliknutí.
Co je scrapování produktů z Amazonu?
Scrapování produktů z Amazonu je proces programového získávání veřejně dostupných dat — názvů produktů, cen, hodnocení, počtu recenzí, obrázků, dostupnosti a dalších informací — ze stránek produktů a výsledků vyhledávání na Amazonu. Místo ručního kopírování údajů ze stovek nabídek scraper projde jednotlivé stránky, načte HTML a vytáhne vámi určená data do strukturovaného formátu, jako je CSV, Excel nebo databáze.
Představ si to jako najmutí neúnavného stážisty, který stihne projít tisíc produktových stránek dřív, než dopiješ ranní kávu. Jen s tím rozdílem, že tenhle stážista nikdy neudělá překlep a nepotřebuje obědovou pauzu.
Proč scrapovat produkty z Amazonu pomocí Pythonu?
Amazon hostí zhruba ve více než 30 kategoriích a běží na přibližně . Prodejci třetích stran dnes tvoří 69 % celkového GMV. Ručně sledovat byť jen zlomek tohoto katalogu je nemožné. Tady je důvod, proč týmy Amazon scrapují:
| Použití | Kdo z toho těží | Co se získává |
|---|---|---|
| Sledování cen a repricing | Ecommerce operace, marketplace prodejci | Ceny, dostupnost, údaje o prodejci |
| Analýza konkurence | Produktoví manažeři, brand týmy | Vlastnosti produktů, hodnocení, počet recenzí |
| Průzkum trhu | Analytici, týmy nových produktů | Trendy v kategoriích, rozložení cen |
| Generování leadů | Obchodní týmy | Jména prodejců, informace o značce, kontaktní údaje |
| Affiliate marketing | Tvůrci obsahu, slevové weby | Ceny, nabídky, detaily produktů |
| Sledování zásob | Dodavatelský řetězec, nákup | Stav skladu, odhad doručení |
Samotné cenové změny na Amazonu už automatizaci přímo vyžadují: Amazon mění ceny a průměrná cena produktu se aktualizuje zhruba každých 10 minut. Naproti tomu konkurenti jako Best Buy nebo Walmart mění ceny jen asi 50 000krát měsíčně. Žádný lidský tým to nemůže stíhat.

Python ti dává plnou kontrolu nad celým procesem scrapování — sám rozhoduješ, co se má získat, jak řešit chyby a kam data uložit. Současně ale neseš odpovědnost za údržbu, ochranu proti blokování a neustálé dohánění častých změn HTML na Amazonu.
Co z Amazonu můžete scrapovat a co raději ne
Z veřejně dostupných produktových stránek obvykle můžeš vytáhnout:
- Název produktu (jméno, značka)
- Cenu (aktuální, původní, akční)
- Hodnocení (průměr hvězdiček)
- Počet recenzí
- Obrázky produktu (URL hlavního obrázku)
- Dostupnost / stav skladu
- ASIN (Amazon Standard Identification Number)
- Popis produktu a odrážky
- Informace o prodejci
- Varianty produktu (velikost, barva atd.)
Čemu by ses měl vyhnout:
- Data za přihlášením: rozšířené stránky recenzí, údaje osobního účtu, historie objednávek
- Osobní údaje: jména kupujících, adresy, platební informace
- Autorsky chráněný obsah určený k opětovnému publikování: popisy a obrázky produktů jsou v pořádku pro analýzu, ale nepřebírej je jako vlastní obsah
Amazonův blokuje více než 50 pojmenovaných botů (včetně GPTBot, Scrapy a ClaudeBot) a zakazuje cesty jako uživatelské účty, košíky a seznamy přání. Produktové stránky výslovně zakázané nejsou, ale podmínky služby Amazonu automatizovaný přístup zakazují. Soudy obecně rozlišují mezi porušením ToS (občanskoprávní věc) a trestním porušením podle CFAA — k právní stránce se vrátím na konci.
Nástroje a knihovny, které budete potřebovat
Tady je Python stack pro tenhle návod:
| Knihovna | Účel | Proč ji používáme |
|---|---|---|
requests | HTTP požadavky | Jednoduché, široce podporované |
beautifulsoup4 | Parsování HTML | Snadná extrakce přes CSS selektory |
lxml | Rychlý HTML parser | Používá se jako backend parseru BeautifulSoup |
curl_cffi | Napodobení TLS fingerprintu | Klíčové pro obejití detekce Amazonu |
pandas | Strukturování a export dat | DataFrame, export do CSV/Excelu |
Volitelné (pro obsah renderovaný přes JavaScript):
seleniumneboplaywright— automatizace headless prohlížeče
Nastavení Python prostředí
Otevři terminál a spusť:
1mkdir amazon-scraper && cd amazon-scraper
2python -m venv venv
3source venv/bin/activate # Na Windows: venv\Scripts\activate
4pip install requests beautifulsoup4 lxml curl_cffi pandas
Ověř, že je vše nainstalované:
1import requests, bs4, curl_cffi, pandas
2print("Vše je v pořádku!")
Když bez chyby uvidíš „Vše je v pořádku!“, máš hotovo.

Proč většina návodů na Amazon scraping selhává (a čím je tenhle jiný)
To je část, kterou většina návodů přeskočí — a zároveň důvod, proč možná právě čteš tenhle článek.
Amazon často aktualizuje HTML strukturu, názvy tříd i ID prvků. Scrapingová komunita uvádí, že kvůli změnám DOM a fingerprintingu. Nejznámější oběť? Selektor #priceblock_ourprice, který se objevoval ve stovkách návodů z let 2018–2023. Tohle ID už na produktových stránkách Amazonu neexistuje.
Rychlé srovnání toho, co je rozbité a co funguje dnes:
| Datový bod | Rozbitý selektor (před 2024) | Fungující selektor pro 2025 |
|---|---|---|
| Cena | #priceblock_ourprice | div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen |
| Název | #productTitle | span#productTitle (stále funguje) |
| Hodnocení | span.a-icon-alt (někdy špatný kontext) | #acrPopover span.a-icon-alt |
| Počet recenzí | #acrCustomerReviewCount | span#acrCustomerReviewText |
| Dostupnost | #availability span | div#availability span.a-size-medium |
Všechny kódy v tomhle návodu byly otestovány na živých stránkách Amazonu v roce 2025. Ukážu ti skutečné CSS selektory i očekávaný výstup — žádné kopírování zastaralých řešení z roku 2022.
Než začnete
- Obtížnost: Střední (předpokládají se základní znalosti Pythonu)
- Časová náročnost: ~30–45 minut pro celý návod; ~10 minut pro základní scraper
- Co budete potřebovat: Python 3.9+, prohlížeč Chrome (pro inspekci stránek Amazonu), terminál a volitelně , pokud chceš porovnat no-code přístup
Krok 1: Odeslání prvního požadavku na Amazon
Otevři v prohlížeči libovolnou produktovou stránku Amazonu a zkopíruj URL. Začneme jednoduchým requests.get():
1import requests
2url = "https://www.amazon.com/dp/B0DGNFM9YJ"
3response = requests.get(url)
4print(response.status_code)
5print(response.text[:500])
Když to spustíš, téměř jistě dostaneš kód 503 nebo stránku s hláškou „To discuss automated access to Amazon data please contact…“. To je Amazon WAF (Web Application Firewall), který detekuje tvůj Python skript. Holý requests.get() bez správných hlaviček má proti Amazonu úspěšnost jen asi .
Uvidíš něco jako 503 a blokovací stránku v HTML. To je očekávané — v dalším kroku to opravíme.
Krok 2: Nastavení vlastních hlaviček a TLS impersonace
Dnes už nestačí jen přidat hlavičku User-Agent. Amazon porovnává HTTP hlavičky s tvým TLS fingerprintem. Pokud tvrdíš, že jsi Chrome 120, ale TLS handshake prozradí knihovnu requests z Pythonu, jsi .
Nejspolehlivější přístup v roce 2025 je použít curl_cffi s impersonací prohlížeče:
1from curl_cffi import requests as cfreq
2headers = {
3 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
4 "Accept-Language": "en-US,en;q=0.9",
5 "Accept-Encoding": "gzip, deflate, br",
6 "Referer": "https://www.google.com/",
7 "DNT": "1",
8 "Connection": "keep-alive",
9 "Upgrade-Insecure-Requests": "1",
10}
11url = "https://www.amazon.com/dp/B0DGNFM9YJ"
12response = cfreq.get(url, headers=headers, impersonate="chrome124")
13print(response.status_code)
14print(len(response.text))
S curl_cffi a impersonací Chrome 124 stoupne úspěšnost přibližně na — tedy 47× lepší výsledek než čistý requests. Teď bys měl vidět stavový kód 200 a výrazně delší HTML odpověď (100 000+ znaků).
Pokud stále dostáváš 503, zkus jinou hodnotu impersonate (např. "chrome131") nebo před opakováním přidej krátké zpoždění.
Krok 3: Parsování HTML a extrakce produktových dat
Teď, když máme kompletní HTML, vytáhneme data pomocí BeautifulSoup a ověřených selektorů pro rok 2025:
1from bs4 import BeautifulSoup
2soup = BeautifulSoup(response.text, "lxml")
3# Název produktu
4title_el = soup.select_one("span#productTitle")
5title = title_el.get_text(strip=True) if title_el else None
6# Cena
7price_el = soup.select_one(
8 "div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen"
9)
10if not price_el:
11 price_el = soup.select_one("span.priceToPay .a-offscreen")
12if not price_el:
13 price_el = soup.select_one(".apexPriceToPay .a-offscreen")
14price = price_el.get_text(strip=True) if price_el else None
15# Hodnocení
16rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17rating = rating_el.get_text(strip=True) if rating_el else None
18# Počet recenzí
19reviews_el = soup.select_one("span#acrCustomerReviewText")
20reviews = reviews_el.get_text(strip=True) if reviews_el else None
21# Dostupnost
22avail_el = soup.select_one("div#availability span")
23availability = avail_el.get_text(strip=True) if avail_el else None
24# URL hlavního obrázku
25img_el = soup.select_one("#landingImage")
26image_url = img_el.get("src") if img_el else None
27print(f"Title: {title}")
28print(f"Price: {price}")
29print(f"Rating: {rating}")
30print(f"Reviews: {reviews}")
31print(f"Availability: {availability}")
32print(f"Image: {image_url}")
Očekávaný výstup (příklad):
1Title: Apple AirPods Pro (2nd Generation) with USB-C
2Price: $189.99
3Rating: 4.7 out of 5 stars
4Reviews: 98,432 ratings
5Availability: In Stock
6Image: https://m.media-amazon.com/images/I/61SUj2...
Všimni si více alternativních selektorů pro cenu — Amazon používá různé kontejnery podle typu produktu, stavu slevy a varianty A/B testu. Když každou extrakci obalíš podmínkou, scraper nespadne ve chvíli, kdy selektor nesedí.
Krok 4: Scrapování více produktů z výsledků vyhledávání
Abys vytvořil skutečný dataset, je lepší začít na stránce výsledků vyhledávání Amazonu, sesbírat ASINy a pak scrapovat jednotlivé produktové stránky.
1import time
2import random
3def get_search_asins(keyword, max_pages=1):
4 """Nasbírá ASINy z výsledků vyhledávání Amazonu."""
5 asins = []
6 for page in range(1, max_pages + 1):
7 search_url = f"https://www.amazon.com/s?k={keyword}&page={page}"
8 resp = cfreq.get(search_url, headers=headers, impersonate="chrome124")
9 if resp.status_code != 200:
10 print(f"Search page {page} returned {resp.status_code}")
11 break
12 search_soup = BeautifulSoup(resp.text, "lxml")
13 results = search_soup.select('div[data-component-type="s-search-result"]')
14 for r in results:
15 asin = r.get("data-asin")
16 if asin:
17 asins.append(asin)
18 print(f"Page {page}: found {len(results)} products")
19 time.sleep(random.uniform(2, 5)) # Ohleduplné zpoždění
20 return asins
21asins = get_search_asins("wireless+earbuds", max_pages=2)
22print(f"Collected {len(asins)} ASINs")
Každý ASIN odpovídá čisté URL produktu: https://www.amazon.com/dp/{ASIN}. To je spolehlivější než používat celé URL z výsledků vyhledávání, která mohou obsahovat parametry specifické pro danou relaci.
Krok 5: Ošetření stránkování a scrapování ve větším měřítku
Teď spojíme sběr z vyhledávání a scrapování detailů do jednoho kompletního pipeline:
1import pandas as pd
2def scrape_product(asin):
3 """Scrapuje jednu produktovou stránku Amazonu."""
4 url = f"https://www.amazon.com/dp/{asin}"
5 try:
6 resp = cfreq.get(url, headers=headers, impersonate="chrome124")
7 if resp.status_code != 200:
8 return None
9 soup = BeautifulSoup(resp.text, "lxml")
10 title_el = soup.select_one("span#productTitle")
11 price_el = (
12 soup.select_one("div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen")
13 or soup.select_one("span.priceToPay .a-offscreen")
14 or soup.select_one(".apexPriceToPay .a-offscreen")
15 )
16 rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17 reviews_el = soup.select_one("span#acrCustomerReviewText")
18 avail_el = soup.select_one("div#availability span")
19 img_el = soup.select_one("#landingImage")
20 return {
21 "asin": asin,
22 "title": title_el.get_text(strip=True) if title_el else None,
23 "price": price_el.get_text(strip=True) if price_el else None,
24 "rating": rating_el.get_text(strip=True) if rating_el else None,
25 "reviews": reviews_el.get_text(strip=True) if reviews_el else None,
26 "availability": avail_el.get_text(strip=True) if avail_el else None,
27 "image_url": img_el.get("src") if img_el else None,
28 "url": url,
29 }
30 except Exception as e:
31 print(f"Error scraping {asin}: {e}")
32 return None
33# Scrape všechna nasbíraná ASIN
34products = []
35for i, asin in enumerate(asins):
36 print(f"Scraping {i+1}/{len(asins)}: {asin}")
37 product = scrape_product(asin)
38 if product:
39 products.append(product)
40 time.sleep(random.uniform(2, 5)) # Náhodná prodleva mezi požadavky
41df = pd.DataFrame(products)
42print(f"\nScraped {len(df)} products successfully")
43print(df.head())
Náhodné zpoždění mezi 2–5 sekundami je zásadní. Naprosto pravidelné načasování (např. přesně 3 sekundy pokaždé) působí Amazonu podezřele při behaviorální analýze. Náhodné intervaly napodobují lidské chování při prohlížení.
Krok 6: Uložení Amazon dat do CSV
1df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
2print("Uloženo do amazon_products.csv")
Teď bys měl mít čisté CSV se sloupci pro ASIN, název, cenu, hodnocení, recenze, dostupnost, URL obrázku a URL produktu. Tady většina návodů končí — ale pokud buduješ skutečný workflow, CSV je teprve začátek.
Hlubší pohled na anti-blocking: jak udržet scraper v chodu
Blokování je pro každého, kdo se pokusí scrapovat produkty z Amazonu pomocí Pythonu. Amazonova šestivrstvá obrana zahrnuje analýzu reputace IP, TLS fingerprinting, kontrolu prostředí prohlížeče, behaviorální biometriku, CAPTCHA a detekci anomálií pomocí ML. Níže je vícevrstvá strategie, jak se vypořádat s každou z nich.
Rotace User-Agentů a plných hlaviček
Jediný statický User-Agent je odhalen velmi rychle. Střídej různé aktuální řetězce prohlížečů:
1import random
2USER_AGENTS = [
3 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.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/143.0.0.0 Safari/537.36",
5 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
6 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
7]
8def get_headers():
9 return {
10 "User-Agent": random.choice(USER_AGENTS),
11 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
12 "Accept-Language": "en-US,en;q=0.9",
13 "Accept-Encoding": "gzip, deflate, br",
14 "Referer": "https://www.google.com/",
15 "DNT": "1",
16 "Connection": "keep-alive",
17 }
Jedna důležitá věc, která lidi často nachytá: Accept-Language musí odpovídat geografické lokalitě, kterou naznačuje tvoje IP. Poslat Accept-Language: en-US z německé IP je varovný signál.
TLS fingerprint impersonace s curl_cffi
Probrali jsme to už v kroku 2, ale stojí za to to zdůraznit: právě tahle technika přináší největší zlepšení úspěšnosti. Standardní Python requests dosahuje proti Amazonu zhruba 2% úspěšnosti. S impersonací přes curl_cffi jsi přibližně na 94 %. To je rozdíl mezi funkčním scraperem a rozbitým nástrojem.
1from curl_cffi import requests as cfreq
2# Cíle impersonace také střídej
3BROWSERS = ["chrome120", "chrome124", "chrome131"]
4response = cfreq.get(
5 url,
6 headers=get_headers(),
7 impersonate=random.choice(BROWSERS),
8)
Rotace proxy
Pokud scrapuješ víc než jen pár stránek, budeš potřebovat rotaci proxy. Amazon sleduje IP adresy a zablokuje každou IP, která posílá příliš mnoho požadavků.
1PROXIES = [
2 "http://user:pass@proxy1.example.com:8080",
3 "http://user:pass@proxy2.example.com:8080",
4 "http://user:pass@proxy3.example.com:8080",
5]
6proxy = random.choice(PROXIES)
7response = cfreq.get(
8 url,
9 headers=get_headers(),
10 impersonate="chrome124",
11 proxies={"http": proxy, "https": proxy},
12)
Rezidenční proxy fungují lépe než datacentrové proxy (Amazon datacentrové IP rozsahy blokuje preventivně), ale jsou také dražší. Pro menší projekt můžeš začít s a podle potřeby škálovat.
Rate limiting a exponenciální backoff
Tohle žádný konkurenční článek, který jsem našel, pořádně neřeší, ale je to zásadní. Když dostaneš odpověď 503 nebo CAPTCHA, nezkoušej to hned znovu — je to rychlá cesta k trvalému zabanování.
1import time
2import random
3def fetch_with_backoff(url, max_retries=3):
4 """Načte URL s exponenciálním backoffem při chybě."""
5 for attempt in range(max_retries):
6 response = cfreq.get(
7 url,
8 headers=get_headers(),
9 impersonate=random.choice(BROWSERS),
10 )
11 if response.status_code == 200:
12 return response
13 # Exponenciální backoff s náhodnou odchylkou
14 wait = min(2 ** attempt + random.uniform(0, 1), 30)
15 print(f"Pokus {attempt+1} selhal ({response.status_code}). Čekám {wait:.1f}s...")
16 time.sleep(wait)
17 return None # Všechny pokusy byly vyčerpány
Vzorec wait = min(2^attempt + jitter, max_delay) zajistí, že zpoždění porostou (2 s, 4 s, 8 s...) a zároveň nepřekročí rozumný limit. Náhodná odchylka navíc brání tomu, aby byl tvůj vzorec opakování snadno fingerprintovatelný.
Fallback na Selenium nebo Playwright pro obsah renderovaný přes JS
Některé Amazon stránky (hlavně s dynamickými cenovými widgety nebo přepínači variant) potřebují k plnému zobrazení JavaScript. Když curl_cffi vrátí neúplné HTML, je tvým záložním řešením headless prohlížeč:
1from playwright.sync_api import sync_playwright
2def scrape_with_browser(url):
3 with sync_playwright() as p:
4 browser = p.chromium.launch(headless=True)
5 page = browser.new_page()
6 page.goto(url, wait_until="domcontentloaded")
7 page.wait_for_timeout(3000) # Necháme doběhnout JS
8 html = page.content()
9 browser.close()
10 return html
Tohle je pomalejší — 3–5 sekund na stránku oproti méně než 1 sekundě s curl_cffi. Používej to jen tehdy, když je to nutné.
Z vlastní zkušenosti curl_cffi zvládne více než 90 % produktových stránek Amazonu bez prohlížeče.
Shrnutí anti-blocking přístupů
| Technika | Obtížnost | Účinnost | Používá ji většina návodů? |
|---|---|---|---|
| Vlastní User-Agent | Snadná | Nízká (Amazon rozpoznává vzorce) | Ano |
| Rotace plných hlaviček | Snadná | Střední | Zřídka |
| TLS impersonace (curl_cffi) | Střední | Vysoká (~94% úspěšnost) | Téměř nikdy |
| Rotace proxy | Střední | Vysoká | Jen stručně, pokud vůbec |
| Rate limiting + exponenciální backoff | Snadná | Střední | Ne |
| Fallback Selenium/Playwright | Střední | Vysoká (pro JS obsah) | Zmíněno, ne ukázáno |
Více než CSV: exportujte Amazon data do Google Sheets, Airtable a dalších nástrojů
Každý návod, který jsem procházel, končí u exportu do CSV. Jenže reálné firemní workflow potřebuje data v Google Sheets, databázích nebo nástrojích jako Airtable a Notion.
Export do Google Sheets pomocí gspread
Nejdřív si nastav Google service account (jednorázové nastavení):
- Otevři → APIs & Services → Credentials
- Vytvoř service account a stáhni JSON klíč
- Ulož ho do
~/.config/gspread/service_account.json - Sdílej cílový spreadsheet s
client_emailz JSON souboru
Pak:
1import gspread
2from gspread_dataframe import set_with_dataframe
3gc = gspread.service_account()
4sh = gc.open("Amazon Scrape Data")
5worksheet = sh.sheet1
6set_with_dataframe(worksheet, df)
7print("Data exportována do Google Sheets!")
Tím se celý tvůj DataFrame zapíše přímo do Google Sheet — živě, sdílitelně a připraveně pro dashboardy.
Uložení do SQLite pro lokální analýzu
Pro větší datasety nebo historické sledování je SQLite ideální — žádné nastavování serveru, jen jeden soubor:
1import sqlite3
2conn = sqlite3.connect("amazon_products.db")
3df.to_sql("products", conn, if_exists="append", index=False)
4print(f"Uloženo {len(df)} produktů do SQLite")
5# Pozdější dotaz:
6historical = pd.read_sql_query(
7 "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
8 conn,
9)
No-code alternativa
Pokud nechceš udržovat Python skripty pro export, nabízí bezplatný export do Google Sheets, Airtable, Notion, Excelu, CSV a JSON — včetně polí s obrázky, která se přímo zobrazují v Airtable a Notion. Žádné nastavování gspread, žádné API přihlašovací údaje, vůbec žádný kód. Pro týmy, které potřebují dostávat data do svých stávajících nástrojů, je to výrazná úspora času.
Plánování automatizovaného scrapování Amazonu — chybějící kapitola
Sledování cen a zásob vyžaduje opakované scrapování, ne jednorázové spuštění. Přesto jsem nenašel jediný konkurenční článek, který by plánování řešil. Tady je, jak automatizovat Python scraper.
Cron úlohy (Linux/macOS)
Otevři crontab:
1crontab -e
Přidej řádek, který spustí scraper každý den v 6:00 ráno:
10 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1
Nebo každých 6 hodin:
10 */6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1
Windows Task Scheduler
Vytvoř dávkový soubor run_scraper.bat:
1@echo off
2cd /d "C:\path\to\amazon-scraper"
3call venv\Scripts\activate
4python scraper.py
5deactivate
Potom otevři Task Scheduler → Create Basic Task → nastav spouštění (Daily, Hourly) → Action: "Start a program" → vyber run_scraper.bat.
GitHub Actions (free tier)
Pro cloudové plánování bez infrastruktury:
1name: Amazon Scraper
2on:
3 schedule:
4 - cron: "0 6 * * *" # Denně v 6:00 UTC
5 workflow_dispatch: # Ruční spuštění
6jobs:
7 scrape:
8 runs-on: ubuntu-latest
9 steps:
10 - uses: actions/checkout@v3
11 - name: Set up Python
12 uses: actions/setup-python@v4
13 with:
14 python-version: "3.11"
15 - name: Install dependencies
16 run: pip install -r requirements.txt
17 - name: Run scraper
18 run: python scraper.py
19 - name: Commit results
20 run: |
21 git config user.name 'GitHub Actions'
22 git config user.email 'actions@github.com'
23 git add data/
24 git diff --staged --quiet || git commit -m "Update scraped data"
25 git push
Ulož přihlašovací údaje pro proxy do GitHub Secrets a máš zdarma automatizované scrapingové řešení.
No-code alternativa: plánovaný scraper od Thunderbit
Pro týmy, které nechtějí řešit syntaxi cronu ani cloudovou infrastrukturu, nabízí Thunderbit vestavěný . Plán si jednoduše popíšeš běžnou češtinou (např. „každý den v 8 ráno“ nebo „každé pondělí“), přidáš Amazon URL a klikneš na „Schedule“. Žádný terminál, žádné YAML soubory, žádný deployment pipeline. Hodí se hlavně pro ecommerce týmy, které potřebují průběžně sledovat ceny nebo zásoby.
Python DIY vs. Scraper API vs. no-code: kterou cestu zvolit?
Tohle je otázka, kterou na fórech vídám pořád, a žádný z předních článků ji neporovnává systematicky. Tak tady je můj upřímný pohled:
| Kritérium | Python + BS4/curl_cffi | Scraper API (ScraperAPI, Oxylabs) | No-code (Thunderbit) |
|---|---|---|---|
| Doba nastavení | 30–60 min | 10–20 min | ~2 minuty |
| Potřebné programování | Ano (Python) | Ano (API volání) | Ne |
| Vestavěná ochrana proti blokování | Ne (DIY) | Ano | Ano |
| Zvládá JS renderování | Jen se Selenium/Playwright | Liší se podle poskytovatele | Ano (Browser nebo Cloud režim) |
| Plánování | DIY (cron/cloud) | Některé služby ano | Vestavěné |
| Cena | Zdarma (+ náklady na proxy) | 30–100+ USD/měsíc | K dispozici zdarma |
| Údržba | Vysoká (selektory se rozbíjejí) | Nízká | Žádná (AI se přizpůsobí) |
| Nejlepší pro | Vývojáře, kteří chtějí plnou kontrolu | Škálování a spolehlivost ve velkém | Rychlost, negrafické uživatele, business týmy |
Python je správná volba, pokud se chceš něco naučit, upravit si vše do detailu a nevadí ti průběžná údržba. Scraper API za tebe řeší anti-blocking, ale pořád potřebuješ kód. A Thunderbit je nejrychlejší cesta pro sales, ecommerce operace nebo kohokoli, kdo prostě potřebuje data — bez selektorů, bez kódu, bez údržby, když Amazon změní HTML.
Jak Thunderbit scrapuje produkty z Amazonu na 2 kliknutí
Jsem samozřejmě zaujatý — tenhle nástroj jsme postavili my. Ale ten workflow je opravdu takhle jednoduchý:
- Nainstaluj
- Otevři stránku výsledků vyhledávání nebo produktovou stránku Amazonu
- Klikni na "AI Suggest Fields" (nebo použij okamžitou šablonu Amazon scraperu)
- Klikni na "Scrape"
AI v Thunderbit přečte stránku, rozpozná datovou strukturu a vyexportuje všechno do přehledné tabulky. Data můžeš zdarma exportovat do Excelu, Google Sheets, Airtable nebo Notionu. Skutečná výhoda je v tom, že když Amazon příští týden změní HTML (a on to udělá), AI v Thunderbit se přizpůsobí automaticky. Žádné rozbité skripty, žádné aktualizace selektorů.
Pro obohacení seznamů produktů daty z detailních stránek nabízí Thunderbit funkci Subpage Scraping, která automaticky následuje odkazy na produktové stránky a doplní další pole, jako jsou obrázky, popisy a varianty — něco, co v Pythonu vyžaduje výrazně více kódu.
Tipy, jak udržet Python Amazon scraper dlouhodobě funkční
Pokud se vydáš cestou Pythonu, tady je, jak minimalizovat bolest z údržby:
- Pravidelně kontroluj selektory. Amazon je mění často. Přidej si tenhle článek do záložek — tabulku selektorů budu aktualizovat podle změn.
- Sleduj úspěšnost. Měř poměr odpovědí 200 oproti 503/CAPTCHA. Nastav upozornění (klidně jen e-mailem), když úspěšnost klesne pod 80 %.
- Ukládej surové HTML. Ulož celou HTML odpověď vedle parsovaných dat. Když se selektory změní, můžeš historická data znovu naparsovat bez nového scrapování.
- Často rotuj proxy a User-Agenty. Statické fingerprinty jsou při větším objemu odhaleny během hodin.
- Používej exponenciální backoff. Nikdy nezkoušej požadavek hned po blokaci.
- Zabal scraper do Dockeru. Usnadníš si nasazení i přenositelnost.
- Přidej validaci dat. Ověř, že ceny jsou číselné, hodnocení je mezi 1–5 a názvy nejsou prázdné. Jeden tým uvedl po přidání validačních vrstev.
Nebo pokud ti to všechno zní jako víc práce, než jsi chtěl, zvaž, jestli pro tvůj use case není vhodnější no-code nástroj jako Thunderbit. Není žádná ostuda zvolit rychlejší cestu — po letech ladění scraperů vím, že někdy je nejlepší kód ten, který vůbec nemusíš psát.
Právní a etické aspekty scrapování Amazonu
Protože tohle se v každé debatě o scrapování Amazonu znovu a znovu objevuje, krátká poznámka k právnímu rámci:
- Scrapování veřejně dostupných dat je v USA obecně legální. Přelomový rozsudek (2022) potvrdil, že přístup k veřejným datům neporušuje CFAA. Nedávněji rozhodnutí (2024) a (2024) tento princip znovu posílila.
- Podmínky služby Amazonu automatizovaný přístup zakazují. Jde o občanskoprávní otázku (porušení smlouvy), nikoli nutně o trestný čin. Soudy mezi těmito dvěma věcmi obecně rozlišují.
- Amazon v. Perplexity (2025) je aktivní případ týkající se AI scrapování stránek Amazonu. V březnu 2026 bylo vydáno předběžné opatření. Stojí za sledování.
- Drž se veřejných stránek. Nenech se přistihnout při scrapování obsahu chráněného přihlášením, osobních dat ani čehokoli za autentizací.
- Respektuj limity. Nezahlcuj servery Amazonu. Prodleva 2–5 sekund mezi požadavky je rozumná.
- Používej data odpovědně. Scrapuj pro analýzu, ne pro přímé znovupublikování chráněného obsahu.
- U velkého komerčního použití se poraď s právníkem, obzvlášť pokud působíš v EU (na osobní data se vztahuje GDPR).
Podrobnější rozbor najdeš v našem průvodci .
Závěr
Teď už máš funkční Python Amazon scraper s ověřenými selektory pro rok 2025, vícevrstvou strategií proti blokování, která jde mnohem dál než „přidej User-Agent“, praktickými možnostmi plánování pro průběžné sledování a exportními metodami, které dostanou data do Google Sheets, databází nebo jakéhokoli nástroje, který tvůj tým používá.
Rychlé shrnutí:
- Python + curl_cffi + BeautifulSoup ti dá plnou kontrolu a při použití TLS impersonace zhruba 94% úspěšnost
- Anti-blocking vyžaduje více vrstev: rotaci hlaviček, TLS impersonaci, rotaci proxy, rate limiting a exponenciální backoff
- Plánování promění jednorázový skript v nepřetržitý monitoring (cron, GitHub Actions nebo vestavěný plánovač Thunderbit)
- Export i mimo CSV — Google Sheets, SQLite, Airtable, Notion — je místo, kde vzniká skutečná obchodní hodnota
- Thunderbit nabízí alternativu na 2 kliknutí pro netechnické uživatele nebo pro kohokoli, kdo raději analyzuje data než ladí selektory
Pokud si chceš kód vyzkoušet, všechno v tomhle návodu je připravené ke zkopírování a spuštění. A pokud chceš kódování přeskočit úplně, ti umožní vyzkoušet no-code přístup na Amazonu hned.
Více najdeš v našich průvodcích , a . Můžeš se také podívat na krok za krokem videa na .
Přeji úspěšné scrapování — a ať tvoje selektory přežijí až do příští aktualizace Amazonu.
Často kladené otázky
1. Proč můj Python Amazon scraper po pár požadavcích skončí blokovaný?
Amazon používá šestivrstvý obranný systém: analýzu reputace IP, TLS fingerprinting (JA3/JA4), detekci prostředí prohlížeče, behaviorální biometriku, CAPTCHA výzvy a detekci anomálií pomocí ML. Základní skript requests s pouhou hlavičkou User-Agent dosahuje jen asi úspěšnosti. Pro spolehlivý přístup potřebuješ TLS impersonaci (curl_cffi), rotaci všech hlaviček, rotaci proxy a rate limiting s náhodnou odchylkou.
2. Které Python knihovny jsou v roce 2025 nejlepší pro scrapování produktů z Amazonu?
curl_cffi pro HTTP požadavky s TLS impersonací (největší jednorázové zlepšení), BeautifulSoup4 s lxml pro parsování HTML, pandas pro strukturování a export dat a jako zálohu Selenium nebo Playwright pro obsah renderovaný přes JavaScript. Python používá scrapingových vývojářů.
3. Je legální scrapovat produktová data z Amazonu?
Scrapování veřejně dostupných dat je v USA obecně legální, jak potvrzují rozsudky jako hiQ v. LinkedIn a Meta v. Bright Data. Podmínky služby Amazonu automatizovaný přístup zakazují, ale soudy rozlišují mezi porušením ToS (občanské) a trestným porušením. Vždy se vyhýbej obsahu za přihlášením, respektuj limity a u velkého komerčního použití se poraď s právníkem.
4. Můžu scrapovat Amazon bez psaní kódu?
Ano. Nástroje jako ti umožní scrapovat produkty z Amazonu na 2 kliknutí pomocí Chrome rozšíření. Jeho AI automaticky rozpozná pole a strukturu dat a výsledky můžeš zdarma exportovat do Excelu, Google Sheets, Airtable nebo Notionu. Když Amazon změní HTML, AI v Thunderbit se přizpůsobí bez ručních úprav.
5. Jak často Amazon mění HTML selektory a jak udržet scraper aktuální?
Často a bez upozornění. Scrapingová komunita uvádí, že crawlerů potřebuje týdenní opravy kvůli změnám DOM. Chceš-li držet krok, sleduj úspěšnost scraperu, ukládej surové HTML pro opětovné parsování a pravidelně kontroluj selektory na živých stránkách. Případně AI nástroje jako Thunderbit se přizpůsobují automaticky a tuhle údržbu eliminují.
Více informací