Jak scrapuji Yelp v Pythonu, aniž bych byl zablokován

Naposledy aktualizováno April 15, 2026

Yelp má napříč — a dostat tahle data do použitelné podoby je dnes těžší než dřív. Tvrdý zásah Yelpu proti botům v letech 2024–2025 potichu rozbil většinu dosavadních Python návodů na scraping.

Pokud jste se v poslední době pokusili spustit Yelp scraper a narazili na zeď chyb 403, prázdných HTML odpovědí nebo CAPTCHA, které tam před půl rokem nebyly, není to jen váš pocit. Yelp dnes používá TLS/JA3 fingerprinting, rotující záměrně zamaskované CSS třídy a agresivní hodnocení reputace IP adres — takže starý přístup requests + BeautifulSoup, který pořád doporučuje každý druhý tutoriál, padne hned na první request. Strávil jsem týdny testováním různých postupů proti aktuální infrastruktuře Yelpu a tenhle průvodce pokrývá všechno, co v roce 2025 opravdu funguje: oficiální Fusion API (a proč samo o sobě pravděpodobně nestačí), kompletní Python workflow s vícevrstvou ochranou proti blokaci a také 2klikové no-code řešení s pro všechny, kdo chtějí data bez maratonu debugování.

Proč scrapovat Yelp v Pythonu a kdo z toho opravdu těží

Než napíšete jediný řádek kódu, je dobré si ujasnit skutečný byznysový důvod. Yelp není jen recenzní web pro restaurace — je to v podstatě živá databáze místních firem se strukturovanými kontaktními údaji, hodnocením, kategoriemi, otevírací dobou a stovkami milionů zákaznických recenzí.

yelp_stats_bd6a43108e.png

Nejvíc z toho těží tyto scénáře a datová pole:

Případ použitíKlíčová dataProč je to důležité
Prodej a lead generationNázev firmy, telefon, web, adresa, kategorie, hodnoceníVytváření cílených seznamů lokálních SMB — 4 z 5 uživatelů Yelpu jsou připraveni nakupovat už při příchodu
Konkurence a intelRecenze, hvězdičkové hodnocení, počet recenzí, sentimentSledování reputace konkurence, odhalování mezer ve službách, tracking trendů
Průzkum trhu a NLPPlný text recenzí, data, metadata recenzentůSentiment analysis, topic modeling — recenze Yelpu patří mezi nejpoužívanější NLP korpusy ve výzkumu
Reality a výběr lokalityHustota firem, mix kategorií, kvalita recenzí podle oblastiVýběr lokality pro franšízy a retail — Yelp přesně pro to prodává Location Intelligence jako licencovaný B2B produkt
Ecommerce a provozCenové signály, stížnosti zákazníků, provozní dobaSledování, jak jsou konkurenti hodnoceni, a odhalování provozních vzorců

Společný jmenovatel je jednoduchý: cílem jsou strukturovaná data a Python je jen jeden z prostředků, jak se k nim dostat. Někdo chce plnou programovou kontrolu. Jinému stačí tabulka s kontakty na instalatéry v Austinu. V tomhle článku najdete obě cesty.

Yelp Fusion API vs. Python web scraping: co je pro vás lepší?

Většina návodů tenhle krok úplně přeskočí a skočí rovnou do kódu, aniž by vůbec řešila, jestli by oficiální (dnes přejmenované na "Yelp Places API") nestačilo. Podle mých zkušeností právě tahle úvaha ušetří hodiny zbytečné práce — protože API je skvělé na některé úlohy, ale na jiné je naprosto nedostatečné.

Co Fusion API skutečně nabízí

Fusion API poskytuje strukturované vyhledávání firem, detaily firem, autocomplete a endpoint pro recenze. Je autorizované, dobře zdokumentované a nevyžaduje anti-bot obezličky.

Jenže právě u recenzního endpointu se to láme. Tohle potvrdili sami zaměstnanci Yelpu na GitHubu:

"Yelp API nevrací plný text recenzí. Ve výchozím stavu jsou k dispozici tři úryvky recenzí po 160 znacích." —

To není chyba — je to záměr. API je omezené na 3 úryvky recenzí (7 u Premium), každý přibližně na 160 znaků. Žádná metadata recenzí (užitečné/veselé/cool hlasy), žádná historie autora, žádné odpovědi provozovatele. A — z původních 5 000. Ceny začínají na .

Rozhodovací rámec

FaktorYelp Fusion APIPython scrapingThunderbit (no-code)
Plné recenze❌ Jen 3 úryvky (~160 znaků každý)✅ Všechny recenze přes GraphQL✅ Všechny viditelné recenze
Limity300–500/den (nové); 5 000 (legacy)Pod vaší správou (rozpočet na proxy)Na kredity
Náročnost nastavení~15 min (API klíč + SDK)Hodiny až dny~2 minuty
Firemní pole~20 strukturovaných políNeomezeně (HTML/JSON parsing)Pole navržená AI
Anti-bot ochranaN/A (autorizované)Musíte vyřešit samiŘešeno automaticky
Právní riziko✅ Autorizované⚠️ Šedá zóna ToS⚠️ Stejné jako scraping
Cenaod $29/měsícZdarma (+ proxy náklady $0.75–$4/GB)K dispozici free tier
ÚdržbaNízká (API stabilní)Vysoká (selectors se rozbíjejí, anti-bot sílí)Nízká (AI se přizpůsobí)

Použijte Fusion API, pokud: potřebujete základní firemní údaje, malé množství dotazů nebo autorizovanou integraci — a stačí vám 3 úryvky recenzí na firmu.

Použijte Python scraping, pokud: potřebujete plný text recenzí, všechny recenze k dané firmě, metadata recenzí, více než 240 výsledků na vyhledávání nebo máte rozpočet pod $29/měsíc.

Použijte Thunderbit, pokud: chcete data rychle bez psaní a správy kódu. Více o tom v no-code části níže.

No-code zkratka: scrapeujte Yelp s Thunderbit (bez Pythonu)

Než se pustíme do Pythonu, tady je nejrychlejší cesta pro každého, jehož skutečným cílem jsou data, ne programování. Každý konkurenční článek předpokládá, že umíte Python, ale z mé práce v Thunderbit vím, že velká část lidí hledajících „scrape Yelp“ jsou obchodníci, operations manažeři a majitelé malých firem, kteří prostě chtějí tabulku místních podniků — ne kurz TLS fingerprintingu.

už má připravené Yelp šablony:

  • — extrahuje název firmy, hodnocení, kontaktní údaje, adresu, otevírací dobu a kategorii
  • — extrahuje uživatelské jméno recenzenta, obsah recenze, hodnocení, datum a lokaci recenzenta

Jak to funguje v praxi

  1. Otevřete stránku s výsledky hledání na Yelp nebo stránku konkrétní firmy v Chromu
  2. Klikněte na AI Suggest Fields v — AI si přečte stránku a navrhne sloupce (název firmy, hodnocení, počet recenzí, cenová úroveň, kategorie, adresa, telefon, URL)
  3. Klikněte na Scrape — hotovo

U předpřipravených Yelp šablon je to ještě jednodušší: otevřete šablonu a klikněte na Scrape.

Scraping podstránek zvládá enrichment automaticky — začnete na stránce výsledků Yelp, zapnete subpage scraping a Thunderbit postupně navštíví každou stránku firmy, aby vytáhl otevírací dobu, plné recenze, web, fotky i vybavení. Bez další konfigurace.

Stránkování je automatické — ať už jde o klikací nebo scrollovací variantu, vše funguje rovnou po instalaci. (Více o tom, jak to funguje, najdete v našem .)

Exporty jsou zdarma ve všech tarifech — Excel, Google Sheets, Airtable, Notion, CSV, JSON. Žádný pandas, žádný kód na zápis CSV.

Porovnání času

ČasPython scraperThunderbit
První spuštěníHodiny až dny (selectors, stránkování, proxy, retry logika)~30 sekund s připravenou Yelp šablonou
Když Yelp změní markupRučně přepsat selektoryZnovu kliknout na AI Suggest Fields — automatická adaptace
Když vám zablokují IPDebug, rotace proxy poolů, znovutestováníCloud režim řeší rotaci IP za vás
Export do Google SheetsNapsat OAuth + pandas propojeníJedno kliknutí, zdarma

Když Thunderbit vyzkoušíte nejdřív a zjistíte, že vám stačí, můžete zbytek článku přeskočit. Pokud potřebujete plnou programovou kontrolu, vlastní pole nebo škálování nad několik tisíc záznamů měsíčně — čtěte dál.

Python knihovny pro scraping Yelpu: kterou vybrat

"Mám použít Scrapy, BS4+requests, nebo Selenium?" je jedna z nejčastějších otázek v diskusích na r/webscraping kolem Yelpu. A přesto si každý tutoriál vybere svou oblíbenou knihovnu a jde dál, aniž by vysvětlil proč. Tady je poctivé rozebrání.

Realita roku 2025: requests + BeautifulSoup je na Yelp rozbitý

Stack, který doporučuje každý klasický návod na Yelp — pip install requests beautifulsoup4 — vás v roce 2025 zablokuje už při prvním requestu. Ne při padesátém. Při prvním.

Důvod: knihovna requests v Pythonu posílá TLS/JA3 fingerprint, který neodpovídá žádnému skutečnému prohlížeči. Yelpova anti-bot vrstva to odhalí už na úrovni TLS handshaku, ještě než se vůbec přečte User-Agent header. Testoval jsem to opakovaně — nová IP, realistické hlavičky, náhodné prodlevy — a stejně jsem hned dostal 403 Forbidden s obyčejným requests.

Matice rozhodnutí mezi knihovnami

KnihovnaNejlepší proZvládá JS?Anti-bot?Náročnost učeníRychlost
requests + BeautifulSoupJednoduchý scraping jedné stránky (na Yelp rozbité)Velmi nízkáRychlá (dokud nejste zablokováni)
httpx async + parselVelkoplošný async scrapingNízkáVelmi rychlá
curl_cffi + parselSpecificky pro Yelp: TLS impersonation✅ TLS/JA3/HTTP2NízkáVelmi rychlá
Scrapy 2.14Kompletní crawl pipeline se stránkovánímČástečně (přes scrapy-playwright)AutoThrottle, retry middlewareStřední až vysokáRychlá
Selenium 4.43 / Playwright 1.58Stránky náročné na JS, obejití CAPTCHAČástečněStředníPomalá (~10–30 stránek/min)
ThunderbitPro neprogramátory, rychlá extrakce✅ (v prohlížeči)Vestavěné (Cloud režim)Velmi nízkáRychlá

Zlomový objev: curl_cffi

Knihovna, která mi úplně změnila workflow pro scraping Yelpu, je — Python binding pro curl-impersonate. Vytváří naprosto stejný TLS/JA3 + HTTP/2 fingerprint jako skutečný Chrome, a její API je prakticky drop-in náhradou za requests:

1from curl_cffi import requests
2r = requests.get(
3    "https://www.yelp.com/biz/some-restaurant",
4    impersonate="chrome131",
5)
6print(r.status_code, len(r.text))

Tahleta jediná změna — from curl_cffi import requests plus impersonate="chrome131" — obejde největší anti-bot vrstvu Yelpu . V mých testech je to rozdíl mezi okamžitou 403 a čistou odpovědí 200.

Doporučený stack pro Yelp v roce 2025: curl_cffi + parsel + jmespath + rezidenční proxy. Pokud potřebujete kompletní crawl pipeline se schedulingem, zabalte to do Scrapy 2.14 s downloader middleware postaveným na curl_cffi.

Nastavení Python prostředí pro scraping Yelpu

  • Obtížnost: střední
  • Časová náročnost: ~15 minut na setup, 1–2 hodiny na funkční scraper
  • Co budete potřebovat: Python 3.10+ (doporučeno 3.12), terminál a volitelně poskytovatele rezidenčních proxy

Krok 1: Vytvořte virtuální prostředí a nainstalujte balíčky

1python3.12 -m venv .venv
2source .venv/bin/activate  # Ve Windows: .venv\Scripts\activate
3pip install "curl_cffi>=0.11" "parsel>=1.9" "jmespath>=1.0" pandas

Co jednotlivé balíčky dělají:

  • curl_cffi — posílá HTTP requesty s Chrome TLS fingerprintem (obejití anti-botu)
  • parsel — CSS/XPath selektory pro parsing HTML (stejný engine jako Scrapy, ale lehčí)
  • jmespath — deklarativní dotazování nad JSON (čistší než vnořené přístupy do dictů u embedded JSON od Yelpu)
  • pandas — export dat do CSV/Excelu

Volitelné, ale užitečné:

1pip install fake-useragent  # Pozn.: repozitář byl archivován v dubnu 2026, ale stále jde nainstalovat

Krok za krokem: jak scrapovat Yelp v Pythonu

Tady začíná hlavní tutoriál. Klíčová myšlenka, která celé řešení dělá mnohem odolnějším: vynechte CSS selektory a vytahujte skrytý JSON. Yelp náhodně mění názvy CSS tříd při každém buildu (y-css-14xwok2 jeden týden, y-css-hcq7b9 další), takže scraper připoutaný k těmto selektorům se během pár týdnů rozpadne. Embedded JSON payloady — application/ld+json schema i react-root-props — jsou stabilní.

Krok 2: Scrapujte výsledky vyhledávání na Yelpu

URL výsledků hledání na Yelpu mají předvídatelný tvar: https://www.yelp.com/search?find_desc={term}&find_loc={location}. Data z výsledků jsou vložená v tagu <script data-id="react-root-props"> jako JSON — ne jako něco vykresleného v moři CSS tříd.

1import re, json, jmespath
2from curl_cffi import requests
3from parsel import Selector
4> This paragraph contains content that cannot be parsed and has been skipped.
5> This paragraph contains content that cannot be parsed and has been skipped.
6Měli byste dostat seznam dictů s názvy firem, URL, hodnocením a počtem recenzí. Pokud `react-root-props` v odpovědi chybí, dostali jste blokovací shell — otočte IP a zkuste to znovu.
7Header `Cookie: intl_splash=false` je běžný workaround pro country-splash redirect Yelpu. Bez něj neamerické IP adresy často narazí na splash stránku, která vypadá jako soft block, ale ve skutečnosti jím není.
8### Krok 3: Scrapujte stránky firem na Yelpu
9Každé URL firmy z výsledků vede na detailní stránku s bohatšími daty. Nejstabilnější cíl pro extrakci je blok `<script type="application/ld+json">` — obsahuje strukturovaná data schema.org, která Yelp drží kvůli SEO a neobfuská.
10```python
11def scrape_business(biz_url: str) -> dict:
12    url = f"https://www.yelp.com{biz_url}" if biz_url.startswith("/") else biz_url
13    r = requests.get(url, headers=HEADERS, impersonate="chrome131")
14    if r.status_code != 200:
15        return {"url": url, "error": r.status_code}
16    sel = Selector(text=r.text)
17    biz_id = sel.css('meta[name="yelp-biz-id"]::attr(content)').get()
18    for raw in sel.css('script[type="application/ld+json"]::text').getall():
19        try:
20            data = json.loads(raw)
21        except json.JSONDecodeError:
22            continue
23        for node in (data if isinstance(data, list) else [data]):
24            if node.get("@type") in (
25                "Restaurant", "LocalBusiness", "FoodEstablishment",
26                "HealthAndBeautyBusiness", "HomeAndConstructionBusiness",
27            ):
28                return {
29                    "biz_id": biz_id,
30                    "name": node.get("name"),
31                    "rating": (node.get("aggregateRating") or {}).get("ratingValue"),
32                    "review_count": (node.get("aggregateRating") or {}).get("reviewCount"),
33                    "address": node.get("address"),
34                    "telephone": node.get("telephone"),
35                    "price_range": node.get("priceRange"),
36                    "hours": node.get("openingHours"),
37                    "url": url,
38                }
39    return {"biz_id": biz_id, "url": url}

Hodnota meta[name="yelp-biz-id"] je zakódované ID firmy, které budete potřebovat pro endpoint s recenzemi. Získejte ji tady — v dalším kroku se vám bude hodit.

Krok 4: Scrapujte recenze Yelpu se stránkováním

Tady Fusion API zaostává a scraping naopak vyniká. Yelpův interní GraphQL batch endpoint vrací plný text recenzí, informace o recenzentech, data, hodnocení a počty hlasů — všechno, co API zadržuje.

Endpoint je https://www.yelp.com/gql/batch a používá statický documentId pro operaci GetBusinessReviewFeed. Stránkování funguje přes cursor zakódovaný v base64.

1import base64
2GQL_URL = "https://www.yelp.com/gql/batch"
3DOC_ID = "ef51f33d1b0eccc958dddbf6cde15739c48b34637a00ebe316441031d4bf7681"
4> This paragraph contains content that cannot be parsed and has been skipped.
5Každá stránka vrací 10 recenzí. Pro stránkování zvyšujte `offset` v base64 cursoru. Parametr `sortBy` přijímá `DATE_DESC` (nejnovější první), `RATING_ASC`, `RATING_DESC` a další.
6### Krok 5: Exportujte data z Yelpu
7```python
8import pandas as pd
9# Předpokládejme, že už máte businesses a reviews
10df_businesses = pd.DataFrame(businesses)
11df_businesses.to_csv("yelp_businesses.csv", index=False)
12df_reviews = pd.DataFrame(all_reviews)
13df_reviews.to_csv("yelp_reviews.csv", index=False)
14> This paragraph contains content that cannot be parsed and has been skipped.
15Pro čtenáře, kteří jdou no-code cestou, Thunderbit exportuje stejná data přímo do Excelu, Google Sheets, Airtable nebo Notion — bez pandas a bez kódu na zápis souborů.
16## Anti-blocking strategie: jak scrapovat Yelp bez blokace
17Tahle část je vlastně důvod, proč tenhle článek existuje. Ochrana Yelpu proti botům je od konce roku 2024 výrazně tvrdší — [TLS fingerprinting, kontrola reputace IP, CAPTCHA a behaviorální analýza](https://blog.apify.com/how-to-scrape-yelp/) jsou všechno součástí hry. Většina starších návodů je zastaralá, protože vznikla ještě před tímto zpřísněním.
18![yelp_antiblock_518f0447bb.png](https://strapi.thunderbit.com/uploads/yelp_antiblock_518f0447bb.png)
19Strategie je vrstvená. Každá vrstva snižuje míru blokací; dohromady z toho vznikne použitelný a dlouhodobě udržitelný scraping.
20### Vrstva 1: realistické request hlavičky
21Výchozí hlavičky Python `requests` posílají `User-Agent: python-requests/2.x` — a to je okamžitě blokované. Jenže ani realistický User-Agent sám o sobě nestačí. Yelp kontroluje celý set [Client Hints](https://scraperapi.com/web-scraping/yelp/) hlaviček a jejich konzistenci.
22```python
23FULL_HEADERS = {
24    "authority": "www.yelp.com",
25    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
26                  "AppleWebKit/537.36 (KHTML, like Gecko) "
27                  "Chrome/124.0.0.0 Safari/537.36",
28    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,"
29              "image/avif,image/webp,image/apng,*/*;q=0.8",
30    "accept-language": "en-US,en;q=0.9",
31    "accept-encoding": "gzip, deflate, br",
32    "sec-ch-ua": '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
33    "sec-ch-ua-mobile": "?0",
34    "sec-ch-ua-platform": '"Windows"',
35    "sec-fetch-dest": "document",
36    "sec-fetch-mode": "navigate",
37    "sec-fetch-site": "same-origin",
38    "sec-fetch-user": "?1",
39    "upgrade-insecure-requests": "1",
40    "referer": "https://www.yelp.com/",
41    "cookie": "intl_splash=false",
42}

Tři chyby, kvůli kterým vás systém označí:

  1. UA tvrdí, že jde o Chrome, ale sec-ch-ua chybí nebo odporuje verzi UA
  2. sec-ch-ua-platform říká "Windows", ale UA string uvádí macOS
  3. Stejný User-Agent pro tisíce requestů z jedné IP — používejte pool 10–20 čerstvých Chrome/Firefox/Safari stringů

Vrstva 2: rate limiting a náhodné prodlevy

Předvídatelné časování je varovný signál. Přidejte náhodné pauzy a při chybách použijte exponenciální backoff.

1import random, time
2> This paragraph contains content that cannot be parsed and has been skipped.
3<Table content={`| **Parametr** | **Doporučená hodnota** |
4|---|---|
5| Náhodná pauza mezi requesty | \`random.uniform(3, 7)\` sekund |
6| Backoff při 429/403/503 | 24816 s, max. 5 pokusů |
7| Současní workeři na jednu IP | 1 (serializovat na IP; pro paralelismus použít proxy) |
8| Maximální udržitelná rychlost na jednu rezidenční IP | ~1 request / 5 s (~12 rpm) |`} />
9### Vrstva 3: rotace User-Agentů a session
10Rotujte mezi sadou reálných browser User-Agentů. Udržujte sessions a cookies, aby to vypadalo jako skutečné prohlížení — Yelp využívá detekci přes cookies, takže vytvářet novou session pro každý request je samo o sobě podezřelé.
11```python
12UA_POOL = [
13    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
14    "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4_1) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
15    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
16    "Mozilla/5.0 (Macintosh; Intel Mac OS X 14.4; rv:125.0) Gecko/20100101 Firefox/125.0",
17    "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4_1) AppleWebKit/605.1.15 Safari/17.4.1",
18    # Přidejte dalších 5–10 aktuálních stringů
19]

Vrstva 4: rotace proxy

Při jakémkoli reálném objemu potřebujete rezidenční proxy. Datacenter ani free proxy na Yelpu nefungují — IP reputační vrstva Yelpu preventivně vrací 403 pro rozsahy AWS, GCP a DigitalOcean.

PoskytovatelStartovní cena za GBPoznámky
IPRoyal$1.75/GBNejlevnější; provozuje nejcitovanější Yelp návod
Decodo (dříve Smartproxy)$3.20–$3.50Nejlepší poměr GB/cena při vyšším objemu
Bright Data$4.00 (PAYG)Pool přes 150M IP; dedikovaná stránka pro Yelp proxy
Oxylabs$6.00–$8.00Prémiové; 10M+ IP
Aluvia (mobile SIM)$3.00Skutečné mobilní IP amerických operátorů, cílené na Yelp

Rotující rezidenční proxy (nová IP pro každý request) fungují nejlépe pro velké crawly výsledků. Sticky sessions (jedna IP po dobu 10 minut) jsou lepší, když chcete zachovat cookies napříč flow stránka firmy → recenze → stránkování.

Vrstva 5: detekce a ošetření blokací

Ne každá blokace vypadá stejně. Yelp často podstrčí generický shell „page not available“ místo CAPTCHA, takže naivní scrapery si myslí, že dostaly data, i když ve skutečnosti dostaly prázdnou odpověď.

1BLOCK_MARKERS = (
2    "captcha", "px-captcha", "page not available",
3    "access denied", "unusual traffic",
4)
5def is_blocked(resp):
6    if resp.status_code in (401, 403, 429, 503):
7        return True
8    body = resp.text.lower()
9    if any(m in body for m in BLOCK_MARKERS):
10        return True
11    # Pokud jde o search/business page a chybí react-root-props,
12    # Yelp poslal ořezanou blokovací odpověď
13    if "react-root-props" not in body and "/biz/" in str(resp.url):
14        return True
15    return False
SignálVýznam
HTTP 403Tvrdý blok — IP/hlavičky/TLS jsou spálené
HTTP 429Rate limit — často se dá zachránit backoffem
HTTP 503Obecný blok nebo load shedding
Redirect na /error nebo tělo „page not available“Soft block
Prázdný jen se Challenge page čekající na JS
captcha / g-recaptcha / px-captcha v těleEskalace — vyžaduje se CAPTCHA
Chybějící react-root-props na listing pageOřezaná blokovací odpověď

Vrstva 6: odolný parsing — skrytý JSON místo CSS selektorů

Je dobré to zopakovat: Yelp náhodně mění názvy CSS tříd při každém buildu. Scraper připoutaný k h3.y-css-14xwok2 se rozbije během pár týdnů, jakmile Yelp nasadí h3.y-css-hcq7b9.

Payloady, které se nemění:

  • <script type="application/ld+json"> — strukturovaná data schema.org (název, adresa, telefon, hodnocení, otevírací doba)
  • <script data-id="react-root-props"> — kompletní data výsledků vyhledávání jako JSON
  • https://www.yelp.com/gql/batch — GraphQL endpoint pro recenze se stabilním documentId

Pokud parsujete CSS třídy, stavíte na písku. Parsujte raději JSON.

Vrstva 7: fallback přes stealth browser

Na headless browser přepínejte jen tehdy, když curl_cffi + rezidenční proxy neprojdou — typicky když Yelp vrátí JavaScript challenge page nebo CAPTCHA.

Pro 95 % scraping úloh pro firmy / vyhledávání / recenze je curl_cffi + skrytý JSON + rezidenční proxy rychlejší, levnější a spolehlivější než browser. Ale když browser opravdu potřebujete:

This paragraph contains content that cannot be parsed and has been skipped.

Pro Yelp vynechte obyčejné Selenium. Je příliš snadno fingerprintovatelné.

Yelp Fusion API vs. Python scraping vs. Thunderbit: kompletní srovnání

DimenzeYelp Fusion APIPython scrapingThunderbit
Plný text recenzí❌ 3 úryvky × ~160 znaků✅ Neomezeně (GraphQL)✅ Vestavěná šablona pro recenze
Metadata recenzí (hlasy, odpovědi provozovatele)✅ Přes pole navržená AI
Fotky❌ (0 na Base)✅ Neomezeně
Maximum výsledků na vyhledávání240 (před 2024 to bylo 1 000)Neomezeně (s paginací)Neomezeně
Denní limit300–500 (nové) / 5 000 (legacy)Jen rozpočet na proxyNa kredity (3 000/měsíc na Pro)
Náročnost nastavení~15 minHodiny až dny~2 minuty
Anti-bot ochranaN/AVáš problémŘešeno (Cloud režim)
Právní rizikoNízké (autorizované)Střední (šedá zóna ToS)Střední (stejné jako scraping)
Cena (start)od $29/měsíc~ $0.75–$4/GB proxy + čas vývojeFree tier
Cena při větším objemu$643+/měsíc$50–$500/měsíc za proxy + čas vývoje$38–$49/měsíc
Export datJSONCSV/JSON (musíte napsat sami)Excel / Sheets / Airtable / Notion — zdarma
ÚdržbaNízkáVysoká (selectors se rozbíjejí, anti-bot sílí)Nízká (AI se přizpůsobí)

Právní a etické tipy pro scraping Yelpu

Nejsem právník a tohle není právní poradenství. Ale právní situace se za poslední dva roky změnila natolik, že byste měli znát základní rámec, než investujete čas do projektu na scraping Yelpu.

Co říkají podmínky Yelpu: výslovně zakazuje používat „jakéhokoli robota, pavouka... nebo jiné automatizované zařízení“ k „přístupu, získávání, kopírování, scrapování nebo indexování jakékoli části služby“. Přibylo také znění o „AI Technologies a/nebo jiných automatizovaných nástrojích“.

: „Yelp nepovoluje žádné scrapování svého webu.“

Co říká robots.txt: robots.txt Yelpu má wildcard User-agent: * / Disallow: / a výslovně blokuje GPTBot, ClaudeBot, PerplexityBot, CCBot a Meta-ExternalAgent. Povoleni jsou jen Googlebot, Bingbot a několik crawlerů sociálních sítí.

Relevantní právní precedens: V případu (N.D. Cal., leden 2024) soud rozhodl, že scraping veřejně dostupných dat bez přihlášení neporušuje podmínky Meta. Klíčové rozlišení je: veřejná data bez přihlášení vs. data po přihlášení. Případ ukázal, že scraping veřejných dat pravděpodobně neporušuje CFAA, ale hiQ přesto prohrál na státních deliktech (trespass to chattels, misappropriation) a dostal rozsudek na $500 000.

Praktická doporučení:

  • Scrapujte jen veřejně dostupné stránky bez přihlášení
  • Omezujte tempo requestů (prodlevy v tomhle návodu zároveň fungují jako etické rate limity)
  • Nepřeprodávejte syrové texty recenzí připsané konkrétním uživatelům — respektujte soukromí recenzentů
  • Dodržujte místní zákony o ochraně dat (CCPA, GDPR)
  • Nepřihlašujte se kvůli scrapingu — to už překračuje hranici autorizace
  • Informace o firmě (název/adresa/telefon/hodnocení) berte jako veřejná faktická data; text recenzí jako citlivější obsah

Pro konkrétní situaci se poraďte s právníkem.

Závěr

Tři cesty, jeden cíl.

Yelp Fusion API je autorizovaná a nenáročná varianta — ale končí na 3 úryvcích recenzí a začíná na $29 měsíčně. Python scraping vám dá plnou kontrolu nad každým datovým bodem na Yelpu, ale vyžaduje reálnou investici: curl_cffi pro TLS impersonation, rezidenční proxy, náhodné prodlevy, parsing skrytého JSON a průběžnou údržbu, jakmile se obrana Yelpu dál vyvíjí. Thunderbit vás dostane od „potřebuji data z Yelpu“ k „tady je moje tabulka“ zhruba za 30 sekund, bez kódu a bez nastavování proxy.

Anti-blocking postupy, které v roce 2025 skutečně fungují: realistické hlavičky s plným Client Hints, curl_cffi pro impersonaci TLS fingerprintu, náhodné prodlevy s exponenciálním backoffem, rotace rezidenčních proxy a — hlavně — parsování skrytého JSON (application/ld+json a react-root-props) místo křehkých CSS selektorů.

Nevíte, která cesta je pro vás? Nejprve zkuste . Pokud vám stačí, ušetřili jste si hodiny práce. Pokud potřebujete víc kontroly — plné programové pipeline, vlastní pole, úzkou integraci s CRM — výše uvedený Python návod vám pokryje záda. A pokud chcete hlubší pohled na krajinu scraping nástrojů, podívejte se na náš přehled nebo na průvodce .

Vyzkoušejte Thunderbit pro extrakci dat z Yelpu

Často kladené otázky

Dá se Yelp zdarma scrapovat v Pythonu?

Ano — pomocí bezplatných knihoven jako curl_cffi, parsel a jmespath. Ale při větším objemu (víc než pár desítek stránek) budete potřebovat placené rezidenční proxy, které začínají zhruba na . Thunderbit navíc nabízí free tier s 6 stránkami měsíčně pro rychlou no-code extrakci.

Blokuje Yelp scrapery?

Ano, a dost agresivně. Yelp používá . Obyčejný requests je blokovaný hned na první pokus. Vrstvená anti-blocking strategie z tohohle průvodce — curl_cffi pro TLS impersonation, realistické hlavičky, náhodné prodlevy a rezidenční proxy — je to, co v roce 2025 funguje.

Je Yelp Fusion API lepší než scraping?

Záleží na vašich potřebách. API je autorizované a s nižším rizikem, ale vrací jen , omezuje výsledky hledání na 240 a začíná na $29 měsíčně. Pokud potřebujete plný text recenzí, metadata recenzí nebo víc než pár stovek záznamů denně, scraping je jediná cesta.

Jak scrapovat recenze z Yelpu v Pythonu?

Použijte curl_cffi s impersonate="chrome131" pro načtení stránky firmy, z <meta name="yelp-biz-id"> vytáhněte zakódované ID firmy a pak pošlete POST na https://www.yelp.com/gql/batch s operací GetBusinessReviewFeed a stránkujte přes base64-enkódovaný after cursor. Krok za krokem kód je v tutoriálu výše. Dobrou referencí je také .

Dá se Yelp scrapovat i bez kódování?

Ano — má předpřipravené šablony pro i . Otevřete stránku Yelpu, klikněte na AI Suggest Fields a potom na Scrape. Export do Google Sheets, Excelu, Airtable a Notion je zdarma ve všech tarifech, včetně free plánu.

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