Naučte se scrapovat produkty z Amazonu pomocí Pythonu

Poslední aktualizace April 16, 2026
Naučte se scrapovat produkty z Amazonu pomocí Pythonu

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 Thunderbit 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 350–600 milionů produktových nabídek ve více než 30 kategoriích a běží na přibližně 9,7 milionu účtů prodejců. 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 repricingEcommerce operace, marketplace prodejciCeny, dostupnost, údaje o prodejci
Analýza konkurenceProduktoví manažeři, brand týmyVlastnosti produktů, hodnocení, počet recenzí
Průzkum trhuAnalytici, týmy nových produktůTrendy v kategoriích, rozložení cen
Generování leadůObchodní týmyJména prodejců, informace o značce, kontaktní údaje
Affiliate marketingTvůrci obsahu, slevové webyCeny, nabídky, detaily produktů
Sledování zásobDodavatelský řetězec, nákupStav skladu, odhad doručení

Samotné cenové změny na Amazonu už automatizaci přímo vyžadují: Amazon mění ceny více než 2,5 milionkrát denně 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.

amazon-product-price-monitor-dashboard.webp

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 robots.txt 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ÚčelProč ji používáme
requestsHTTP požadavkyJednoduché, široce podporované
beautifulsoup4Parsování HTMLSnadná extrakce přes CSS selektory
lxmlRychlý HTML parserPoužívá se jako backend parseru BeautifulSoup
curl_cffiNapodobení TLS fingerprintuKlíčové pro obejití detekce Amazonu
pandasStrukturování a export datDataFrame, export do CSV/Excelu

Volitelné (pro obsah renderovaný přes JavaScript):

  • selenium nebo playwright — automatizace headless prohlížeče

Nastavení Python prostředí

Otevři terminál a spusť:

mkdir amazon-scraper && cd amazon-scraper
python -m venv venv
source venv/bin/activate  # Na Windows: venv\Scripts\activate
pip install requests beautifulsoup4 lxml curl_cffi pandas

Ověř, že je vše nainstalované:

import requests, bs4, curl_cffi, pandas
print("Vše je v pořádku!")

Když bez chyby uvidíš „Vše je v pořádku!“, máš hotovo.

laptop-coding-workspace.webp

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 10–15 % crawlerů potřebuje každý týden opravy 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ý bodRozbitý selektor (před 2024)Fungující selektor pro 2025
Cena#priceblock_ourpricediv#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen
Název#productTitlespan#productTitle (stále funguje)
Hodnoceníspan.a-icon-alt (někdy špatný kontext)#acrPopover span.a-icon-alt
Počet recenzí#acrCustomerReviewCountspan#acrCustomerReviewText
Dostupnost#availability spandiv#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ě Thunderbit Chrome Extension, 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():

import requests

url = "https://www.amazon.com/dp/B0DGNFM9YJ"
response = requests.get(url)
print(response.status_code)
print(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 2 %.

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 okamžitě označen.

Nejspolehlivější přístup v roce 2025 je použít curl_cffi s impersonací prohlížeče:

from curl_cffi import requests as cfreq

headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "https://www.google.com/",
    "DNT": "1",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
}

url = "https://www.amazon.com/dp/B0DGNFM9YJ"
response = cfreq.get(url, headers=headers, impersonate="chrome124")
print(response.status_code)
print(len(response.text))

S curl_cffi a impersonací Chrome 124 stoupne úspěšnost přibližně na 94 % — 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:

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, "lxml")

# Název produktu
title_el = soup.select_one("span#productTitle")
title = title_el.get_text(strip=True) if title_el else None

# Cena
price_el = soup.select_one(
    "div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen"
)
if not price_el:
    price_el = soup.select_one("span.priceToPay .a-offscreen")
if not price_el:
    price_el = soup.select_one(".apexPriceToPay .a-offscreen")
price = price_el.get_text(strip=True) if price_el else None

# Hodnocení
rating_el = soup.select_one("#acrPopover span.a-icon-alt")
rating = rating_el.get_text(strip=True) if rating_el else None

# Počet recenzí
reviews_el = soup.select_one("span#acrCustomerReviewText")
reviews = reviews_el.get_text(strip=True) if reviews_el else None

# Dostupnost
avail_el = soup.select_one("div#availability span")
availability = avail_el.get_text(strip=True) if avail_el else None

# URL hlavního obrázku
img_el = soup.select_one("#landingImage")
image_url = img_el.get("src") if img_el else None

print(f"Title: {title}")
print(f"Price: {price}")
print(f"Rating: {rating}")
print(f"Reviews: {reviews}")
print(f"Availability: {availability}")
print(f"Image: {image_url}")

Očekávaný výstup (příklad):

Title: Apple AirPods Pro (2nd Generation) with USB-C
Price: $189.99
Rating: 4.7 out of 5 stars
Reviews: 98,432 ratings
Availability: In Stock
Image: 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.

import time
import random

def get_search_asins(keyword, max_pages=1):
    """Nasbírá ASINy z výsledků vyhledávání Amazonu."""
    asins = []
    for page in range(1, max_pages + 1):
        search_url = f"https://www.amazon.com/s?k={keyword}&page={page}"
        resp = cfreq.get(search_url, headers=headers, impersonate="chrome124")
        if resp.status_code != 200:
            print(f"Search page {page} returned {resp.status_code}")
            break

        search_soup = BeautifulSoup(resp.text, "lxml")
        results = search_soup.select('div[data-component-type="s-search-result"]')

        for r in results:
            asin = r.get("data-asin")
            if asin:
                asins.append(asin)

        print(f"Page {page}: found {len(results)} products")
        time.sleep(random.uniform(2, 5))  # Ohleduplné zpoždění

    return asins

asins = get_search_asins("wireless+earbuds", max_pages=2)
print(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:

import pandas as pd

def scrape_product(asin):
    """Scrapuje jednu produktovou stránku Amazonu."""
    url = f"https://www.amazon.com/dp/{asin}"
    try:
        resp = cfreq.get(url, headers=headers, impersonate="chrome124")
        if resp.status_code != 200:
            return None

        soup = BeautifulSoup(resp.text, "lxml")

        title_el = soup.select_one("span#productTitle")
        price_el = (
            soup.select_one("div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen")
            or soup.select_one("span.priceToPay .a-offscreen")
            or soup.select_one(".apexPriceToPay .a-offscreen")
        )
        rating_el = soup.select_one("#acrPopover span.a-icon-alt")
        reviews_el = soup.select_one("span#acrCustomerReviewText")
        avail_el = soup.select_one("div#availability span")
        img_el = soup.select_one("#landingImage")

        return {
            "asin": asin,
            "title": title_el.get_text(strip=True) if title_el else None,
            "price": price_el.get_text(strip=True) if price_el else None,
            "rating": rating_el.get_text(strip=True) if rating_el else None,
            "reviews": reviews_el.get_text(strip=True) if reviews_el else None,
            "availability": avail_el.get_text(strip=True) if avail_el else None,
            "image_url": img_el.get("src") if img_el else None,
            "url": url,
        }
    except Exception as e:
        print(f"Error scraping {asin}: {e}")
        return None

# Scrape všechna nasbíraná ASIN
products = []
for i, asin in enumerate(asins):
    print(f"Scraping {i+1}/{len(asins)}: {asin}")
    product = scrape_product(asin)
    if product:
        products.append(product)
    time.sleep(random.uniform(2, 5))  # Náhodná prodleva mezi požadavky

df = pd.DataFrame(products)
print(f"\nScraped {len(df)} products successfully")
print(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

df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
print("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 největší bolestivý bod 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čů:

import random

USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
    "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",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
    "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",
]

def get_headers():
    return {
        "User-Agent": random.choice(USER_AGENTS),
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
        "Referer": "https://www.google.com/",
        "DNT": "1",
        "Connection": "keep-alive",
    }

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.

from curl_cffi import requests as cfreq

# Cíle impersonace také střídej
BROWSERS = ["chrome120", "chrome124", "chrome131"]

response = cfreq.get(
    url,
    headers=get_headers(),
    impersonate=random.choice(BROWSERS),
)

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

PROXIES = [
    "http://user:pass@proxy1.example.com:8080",
    "http://user:pass@proxy2.example.com:8080",
    "http://user:pass@proxy3.example.com:8080",
]

proxy = random.choice(PROXIES)
response = cfreq.get(
    url,
    headers=get_headers(),
    impersonate="chrome124",
    proxies={"http": proxy, "https": proxy},
)

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 placenou proxy službou 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í.

import time
import random

def fetch_with_backoff(url, max_retries=3):
    """Načte URL s exponenciálním backoffem při chybě."""
    for attempt in range(max_retries):
        response = cfreq.get(
            url,
            headers=get_headers(),
            impersonate=random.choice(BROWSERS),
        )
        if response.status_code == 200:
            return response

        # Exponenciální backoff s náhodnou odchylkou
        wait = min(2 ** attempt + random.uniform(0, 1), 30)
        print(f"Pokus {attempt+1} selhal ({response.status_code}). Čekám {wait:.1f}s...")
        time.sleep(wait)

    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č:

from playwright.sync_api import sync_playwright

def scrape_with_browser(url):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()
        page.goto(url, wait_until="domcontentloaded")
        page.wait_for_timeout(3000)  # Necháme doběhnout JS
        html = page.content()
        browser.close()
        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ů

TechnikaObtížnostÚčinnostPoužívá ji většina návodů?
Vlastní User-AgentSnadnáNízká (Amazon rozpoznává vzorce)Ano
Rotace plných hlavičekSnadnáStředníZřídka
TLS impersonace (curl_cffi)StředníVysoká (~94% úspěšnost)Téměř nikdy
Rotace proxyStředníVysokáJen stručně, pokud vůbec
Rate limiting + exponenciální backoffSnadnáStředníNe
Fallback Selenium/PlaywrightStř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í):

  1. Otevři Google Cloud Console → APIs & Services → Credentials
  2. Vytvoř service account a stáhni JSON klíč
  3. Ulož ho do ~/.config/gspread/service_account.json
  4. Sdílej cílový spreadsheet s client_email z JSON souboru

Pak:

import gspread
from gspread_dataframe import set_with_dataframe

gc = gspread.service_account()
sh = gc.open("Amazon Scrape Data")
worksheet = sh.sheet1

set_with_dataframe(worksheet, df)
print("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:

import sqlite3

conn = sqlite3.connect("amazon_products.db")
df.to_sql("products", conn, if_exists="append", index=False)
print(f"Uloženo {len(df)} produktů do SQLite")

# Pozdější dotaz:
historical = pd.read_sql_query(
    "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
    conn,
)

No-code alternativa

Pokud nechceš udržovat Python skripty pro export, Thunderbit 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:

crontab -e

Přidej řádek, který spustí scraper každý den v 6:00 ráno:

0 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Nebo každých 6 hodin:

0 */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:

@echo off
cd /d "C:\path\to\amazon-scraper"
call venv\Scripts\activate
python scraper.py
deactivate

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:

name: Amazon Scraper

on:
  schedule:
    - cron: "0 6 * * *"  # Denně v 6:00 UTC
  workflow_dispatch:       # Ruční spuštění

jobs:
  scrape:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.11"
      - name: Install dependencies
        run: pip install -r requirements.txt
      - name: Run scraper
        run: python scraper.py
      - name: Commit results
        run: |
          git config user.name 'GitHub Actions'
          git config user.email 'actions@github.com'
          git add data/
          git diff --staged --quiet || git commit -m "Update scraped data"
          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ý Scheduled Scraper. 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ériumPython + BS4/curl_cffiScraper API (ScraperAPI, Oxylabs)No-code (Thunderbit)
Doba nastavení30–60 min10–20 min~2 minuty
Potřebné programováníAno (Python)Ano (API volání)Ne
Vestavěná ochrana proti blokováníNe (DIY)AnoAno
Zvládá JS renderováníJen se Selenium/PlaywrightLiší se podle poskytovateleAno (Browser nebo Cloud režim)
PlánováníDIY (cron/cloud)Některé služby anoVestavěné
CenaZdarma (+ náklady na proxy)30–100+ USD/měsícK dispozici zdarma
ÚdržbaVysoká (selektory se rozbíjejí)NízkáŽádná (AI se přizpůsobí)
Nejlepší proVývojáře, kteří chtějí plnou kontroluŠkálování a spolehlivost ve velkémRychlost, 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ý:

  1. Nainstaluj Thunderbit Chrome Extension
  2. Otevři stránku výsledků vyhledávání nebo produktovou stránku Amazonu
  3. Klikni na "AI Suggest Fields" (nebo použij okamžitou šablonu Amazon scraperu)
  4. 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 21% snížení chyb v navazujících procesech 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 hiQ Labs v. LinkedIn (2022) potvrdil, že přístup k veřejným datům neporušuje CFAA. Nedávněji rozhodnutí Meta v. Bright Data (2024) a X v. Bright Data (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 právními dopady web scrapingu.

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ě, bezplatný plán Thunderbit ti umožní vyzkoušet no-code přístup na Amazonu hned.

Více najdeš v našich průvodcích jak scrapovat produkty a recenze z Amazonu, nejlepší Python web scraping nástroje a scraping cen na Amazonu. Můžeš se také podívat na krok za krokem videa na Thunderbit YouTube kanálu.

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 2% ú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á 69,6 % 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 Thunderbit 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 10–15 % 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í

Shuai Guan
Shuai Guan
CEO ve společnosti Thunderbit | Expert na automatizaci dat s využitím AI Shuai Guan je CEO společnosti Thunderbit a absolvent inženýrského oboru na University of Michigan. Na základě téměř deseti let zkušeností v oblasti technologií a architektury SaaS se zaměřuje na převádění složitých modelů AI do praktických nástrojů pro extrakci dat bez nutnosti programování. Na tomto blogu sdílí nezkreslené a v praxi ověřené poznatky o web scrapingu a automatizačních strategiích, které vám pomohou vytvářet chytřejší datově řízené pracovní postupy. Když zrovna neoptimalizuje datové workflow, věnuje stejný důraz na detail také své vášni pro fotografii.
Obsah

Získej data z webu jen tím, že si o ně řekneš

Řekni, co potřebuješ, obyčejnou angličtinou. Nebo ještě lépe – neříkej nic.

Vyzkoušet Thunderbit zdarma
Získej data pomocí AI
Snadno přenes data do Google Sheets, Airtable nebo Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week