Recenze Scrapy 2.17: Vynechá prohlížeč a jde přímo na API

Poslední aktualizace July 17, 2026
Recenze Scrapy 2.17: Vynechá prohlížeč a jde přímo na API
Shrnutí od AI
This Scrapy review challenges the common claim that the framework is outdated because it does not run JavaScript. The tests show that Scrapy is strongest when it can replay the underlying HTTP or JSON API behind a page, producing clean structured output without browser overhead. The article covers static extraction, API-backed dynamic data, error handling, feed exports, setup cost, and the point where browser rendering becomes necessary. It presents Scrapy as a mature, production-shaped crawler for HTTP-first scraping, queues, pipelines, and exports, rather than a drop-in solution for every JavaScript-rendered page.

Scrapy se často hází do škatulky „nezvládá moderní weby“, protože nespouští JavaScript. Jenže tenhle pohled je úplně převrácený. To, že stránku vůbec neren­deruje, je totiž záměr — a jakmile tenhle princip uvidíte v praxi, přestane to působit jako chybějící funkce.

Sám jsem si to ověřil během jediného testu. Postavil jsem si katalog vykreslovaný přes JavaScript, nasměroval na něj Scrapy tak, jak by ho zobrazil prohlížeč, a dostal zpět 0 produktových karet. Pak jsem stejný spider poslal na JSON endpoint, který si ta stránka potichu volala na pozadí, a dostal jsem čistých 8/8 položek. Stejný nástroj, stejná session, úplně jiný výsledek — a přesně o tom je tahle recenze.

Co Scrapy vlastně je a co není

Scrapy HTTP-only workflow

Scrapy je Python framework pro procházení webů a získávání strukturovaných dat. Přesně tak ho popisují i sami správci v dokumentaci přehledu, a po praktickém používání je jasné, že to sedí — žádné marketingové přikrášlování. Je dost starý a zavedený na to, aby byl první odpovědí, když se Python vývojář zeptá, čím seriózní lidi scrapují. A repo to potvrzuje: zhruba 62 981 hvězdiček na GitHubu k 2026-07-07 (scrapy/scrapy), k tomu 11 773 forků a 590 otevřených issue ve stejný den. Licence BSD-3-Clause, Python 3.10 nebo novější a verze, kterou jsem testoval, byla 2.17.0 — shodou okolností vyšla právě v den, kdy jsem testy spouštěl, takže tady není žádná poznámka pod čarou o zastaralé verzi.

Tady je hranice, která ho odděluje od novější AI-crawler vlny: Scrapy je ve výchozím nastavení čistě HTTP. Žádný prohlížeč. Žádný renderovací engine. Stáhne HTML přes síť, pošle ho parseru a pak si z něj vytáhnete pole přes CSS selektory nebo XPath. Nazvat to omezením je jen napůl pravda — a míjí to samotný design. Podstata Scrapy je v tom, že pro rutinní scraping obvykle nedává smysl startovat headless Chrome. Chytřejší cesta je najít datový request, který si stránka stejně volá, a jít přímo na něj.

A tohle není moje interpretace nástroje. Oficiální dokumentace k dynamickému obsahu to říká naprosto otevřeně: nejdřív najděte a napodobte původní datový request a headless prohlížeč použijte až jako zálohu, když to napodobit prakticky nejde. Většina scraperů otevře prohlížeč jako první a na API vůbec nemyslí. Scrapy tenhle default obrací.

Klíčové funkce a proč jsou navržené právě takto

Pod kapotou je Scrapy soubor nástrojů, které všechny předpokládají jednu věc: že jste vývojář, který chce kontrolu, ne jednorázového kouzelníka na jedno kliknutí.

Spiders. Napíšete třídu, předáte jí startovní URL a definujete parse callback, který vrací položky nebo pokračuje po dalších odkazech. Je to víc psaní než u no-code extraktoru — pravidla extrakce si určujete sami — ale na oplátku máte přesnou kontrolu nad tím, co se získá a kam se crawl vydá dál.

Selektory. Parsování stojí na parsel, který běží nad lxml. CSS i XPath jsou plnohodnotnou součástí, ne nějaký dodatek bokem. Díky lxml zůstává výběr rychlý a samotný kód působí jako záměr, ne jako zamotaný řetězec manipulace s textem.

Feed exporty. Když nasměrujete spider do souboru, Scrapy bez dalšího nastavování uloží data do JSON, JSON Lines, CSV nebo XML. V mém testu jeden spider s katalogem vypsal JSON i CSV bez jediné řádky exportního kódu z mojí strany — feed export není jen marketing, opravdu funguje.

AutoThrottle a řízení crawlů. Požadavky se plánují asynchronně přes Twisted a k dispozici máte limity souběhu, zpoždění mezi požadavky, omezení hloubky, AutoThrottle pro adaptivní rate limiting a respektování robots.txt. Tohle jsou pojistky, které zabrání tomu, aby se velký crawl změnil v útok na server.

HTTP-only jako funkce. Žádný prohlížeč znamená nízkou paměťovou náročnost, vysokou propustnost a žádný renderovací engine, o který byste se museli starat — pokud jsou data dostupná přes obyčejné HTTP. A to je častěji, než si browser-first svět myslí.

Instalace: ta zásobní vrstva závislostí, kterou nikdo nefotí

Scrapy dependency stack

Instalace byla naprosto bez dramatu, což je u frameworku téhle velikosti vlastně dobrá zpráva a stojí za to to říct nahlas. pip install Scrapy==2.17.0 proběhl v čistém virtuálním prostředí na macOS arm64 hladce, stáhly se binární wheel balíčky a nic se nemuselo kompilovat do zdi. Nic spektakulárního — a právě o to jde.

Jenže podívejte se, co všechno se stáhlo. scrapy version -v ukázalo Scrapy 2.17.0 postavené na lxml 6.1.1, Twisted 26.4.0, pyOpenSSL 26.3.0 a cryptography 49.0.0, a doplnily to ještě balíčky parsel, cssselect a tldextract. To je pořádná stopa — skutečný framework pro crawling, ne jen jeden souborový HTML parser. Na mém stroji byly wheel balíčky dostupné pro všechno a instalace zůstala bezbolestná. V jiných prostředích ale oficiální dokumentace pořád upozorňuje na platformně specifické potíže se závislostmi, a historicky bývá nejcitlivější část stacku kolem cryptography a Twisted, takže s tím počítejte, pokud běžíte na něčem netypickém. Tady byla instalace hladká; velikost toho, co se nainstaluje, je ale pořád dobré vědět předem, protože stahujete celý framework a ten váží jako framework.

Praktický test: co drželo a co ne

Scrapy hands-on results

Jakmile bylo nainstalováno, statická cesta fungovala bez problémů. Plná návratnost, nic nechybělo.

TestVýsledekČas běhu
Lokální statický katalog + stránkování12/12 produktů0.557 s
Export CSV ze statického kataloguzapsáno 12 řádků(stejný běh)
Extrakce článkunázev + 3/3 odstavce0.416 s
Crawl graph, DEPTH_LIMIT=211 stránek napříč hloubkami 0/1/20.904 s
Lokální stránka s kódem 500zachycen status 500, bez pádu0.424 s
Books to Scrape (veřejné)20 produktů2.053 s
Quotes to Scrape spider (veřejné)12 citačních položek3.465 s

Spider nad statickým katalogem prošel stránkování z první na druhou stránku a zachytil 12/12 očekávaných záznamů, a pak je v tom samém běhu vypsal do JSON i CSV. Vzorový článek je důležitější. Scrapy se nesnažil stránku automaticky „uklidit“ do Markdownu — místo toho mi dovolil cílit na pole article přes přesné selektory a navigaci s patičkou uložit do samostatných polí. Výsledek: 3/3 odstavce těla článku, zatímco boilerplate zůstal izolovaný a nerozmazal se do výstupu. To je ta výměna: vy píšete selektory a dostanete přesně to, o co jste si řekli, nic navíc.

Řízení crawlů obstálo i v malém měřítku. S DEPTH_LIMIT=2, krátkou prodlevou mezi stahováním, souběhem na doménu a zapnutým robots.txt prošel crawl graf přes 11 stránek ve hloubkách 0, 1 a 2 a počítání hloubky fungovalo správně. Stejně klidné bylo i zpracování chyb. Záměrná stránka s HTTP 500 se vrátila jako strukturovaná položka se zobrazeným status 500 přes handle_httpstatus_list — žádná výjimka, žádné spadlé běžení. Scrapy bere chybový stav jako něco, co řešíte uvnitř logiky spideru, ne jako nečekaný pád celého crawlu.

Praktický test: JavaScriptová zeď a dveře vedle ní

Scrapy JS page 0 nodes vs JSON API 8/8

A teď výsledek, na kterém tahle recenze stojí.

Nasměroval jsem HTTP fetcher Scrapy na katalog vykreslovaný JavaScriptem. Stáhl zdrojové HTML, našel 0 uzlů .product-card a pokračoval dál — protože nikdy nespustil skript, který by ty karty vykreslil. Stejný příběh ukázala i veřejná stránka Quotes to Scrape JS page: 0 vykreslených citačních uzlů. Kdyby test skončil tady, člověk by Scrapy snadno odepsal jako nepoužitelné pro cokoli postavené v tomhle desetiletí.

Jenže tady test nekončí. Ten JS katalog se na pozadí plnil přes JSON API, jako většina podobných stránek. Stejný spider jsem poslal na ten endpoint a dostal jsem 8/8 produktů za 0.416 s — bez prohlížeče, bez renderování, jen požadavek na URL, kterou stránka už stejně volala, a parsování JSONu, který se vrátil.

Tohle side-by-side srovnání je v miniatuře celá filozofie „reprodukuj request“. Vykreslená stránka je jen návnada; data seděla celou dobu za API a design Scrapy vás tlačí k tomu, abyste na něj šli přímo místo toho, abyste platili headless prohlížeč jen za to, že sleduje, jak se stránka skládá dohromady. Je to rychlejší, lehčí a méně se to láme — kontrakt API je stabilnější než hromada client-side DOMu. Háček je v tom, že je to manuální. Musíte otevřít síťovou záložku, najít request a sami napodobit hlavičky i parametry. Scrapy API za vás neobjeví; jen vám umožní ho snadno trefit, jakmile ho máte.

Dvě hranice úplně na rovinu. Když skutečně neexistuje žádný původní request, který by šel reprodukovat — třeba když jsou data vykreslovaná čistě na klientovi a žádné API za tím není — Scrapy potřebuje napojení na headless prohlížeč, které si musíte zapojit sami, a tuhle cestu jsem v tomto testu nezkoušel. A všechno výše uvedené běželo na malých fixturech a veřejných demo stránkách. Netestoval jsem crawl o 100 až 1 000 stránkách, takže si nedovoluji tvrdit nic o paměti, propustnosti ani chování retry mechanismu ve velkém měřítku — asynchronní jádro a crawl kontrola jsou silný signál, ale signál není měření.

Klady a zápory

Klady:

  • HTTP-only přístup je rychlý a lehký — 12/12 na statickém testu za zhruba půl sekundy, 8/8 z JSON API za 0.416 s, žádná režie prohlížeče.
  • Přístup „reprodukuj request“ opravdu funguje: JS stránka, která vracela 0, vydala všech 8 položek přes své API.
  • CSS a XPath selektory postavené na lxml drží kód čitelný a rychlý.
  • Feed exporty do JSON/CSV/XML bez nutnosti psát exportní logiku.
  • Explicitní zpracování chyb — 500 se vrátí jako status, který zachytíte, ne jako pád.
  • Zralé řízení crawlů: souběh, zpoždění, limity hloubky, AutoThrottle, robots.txt.
  • Permisivní licence BSD-3-Clause; čistá instalace na aktuálním stroji.

Zápory:

  • Z principu nerenderuje JavaScript — na klientsky vykreslené stránce vyjde 0 uzlů, dokud si sami nenajdete API.
  • Najít původní request je ruční práce; Scrapy vás na endpoint samo neukáže.
  • Poměrně velký balík závislostí (Twisted, lxml, cryptography, pyOpenSSL, parsel, tldextract) — tady bez problémů, ale na neobvyklých platformách to historicky bývá citlivé.
  • Více kódu než u no-code nebo automatických extrakčních nástrojů; spiders si musíte psát a udržovat sami.
  • Testoval jsem malé fixture a demo weby, ne velké crawl kampaně — spolehlivost ve velkém zatím v této verzi testu neprokázaná.

Pro koho je a kdo by měl jít dál

Scrapy manual API boundary

Scrapy je pro vývojáře, kteří chtějí kontrolu na úrovni kódu a přemýšlejí v requestech, ne ve stránkách. Pokud je vaše první reakce na pomalý JavaScriptový web „někde pod tím bude API“, tenhle nástroj je přesně pro tenhle instinkt. Odmění lidi, kteří umí psát selektory, číst síťovou záložku a mít plně pod kontrolou vlastní extrakční logiku. Pro statické weby, stránkované katalogy a cokoli, co stojí na dohledatelném JSON endpointu, je rychlé a přesné.

Jděte dál — nebo ho aspoň kombinujte s něčím dalším — pokud nechcete trávit čas psaním a údržbou spider kódu, nebo pokud vaše cíle vykreslují data čistě na klientovi bez reprodukovatelného requestu a vy si nechcete sami přidávat headless browser. A jestli byl sen jen vložit URL do nástroje a dostat čistý strukturovaný výstup bez psaní extrakčních pravidel, to nikdy nebyla práce pro Scrapy a nikdy se netvářilo, že je.

Alternativy a kam zapadá Thunderbit

Vyzkoušet Thunderbit pro extrakci webových dat

Začněte tím, k čemu se vlastně zavazujete: k bezplatnému open-source frameworku, který si sami provozujete a spravujete. Spiders, zásobník závislostí i práci s hledáním datového requestu u každého webu máte na starosti vy. Na oplátku neplatíte za jednotlivé requesty, všechno zůstává u vás a máte úplnou kontrolu. Pro spoustu týmů je to správná volba a tahle recenze nikoho nepřesvědčuje, aby od ní ustupoval.

Ta výměna ale leží v problému renderování a driftu a Scrapy na to odpovídá tak, že to vyřešíte vy: najdete API, napodobíte request a případ bez API vyřešíte vlastním napojením na prohlížeč. Spravované AI scraping API tuhle vrstvu bere z vašich rukou. Přesně v tomhle prostoru pro technické čtenáře leží Thunderbit — AI scraping API plus MCP server plus CLI, ne browser extension pro obchodní a operations týmy. POST /distill převede stránku do čistého Markdownu připraveného pro LLM; POST /extract vrací strukturované JSON podle schématu, které si určíte; a obě volání zvládají renderování JavaScriptu, anti-bot ochrany i dynamický obsah na straně serveru — včetně klientsky vykresleného případu, kdy vás Scrapy nutí sáhnout po prohlížeči. K dispozici je i MCP server pro AI agenty a kodérské asistenty (s bezplatnou funkcí thunderbit_suggest_fields pro zpřesnění stránky, než cokoli utratíte) a CLI přes npx @thunderbit/thunderbit-cli pro práci v terminálu, CI nebo přes cron.

Rozdíl není v kvalitě, ale v odpovědnosti. Scrapy je explicitní inženýrský framework: spider, pipeline i JS strategii spravujete sami a za každé volání nic neplatíte. Stack Thunderbit naopak vrstvu renderu a extrakce předává jako managed službu, takže nemusíte pročítat síťové requesty po jednom a platíte za jednotlivá volání. Malý, code-first přístup a chcete mít každý krok pod kontrolou? Scrapy je lepší volba. Rozšiřujete scraping přes stovku webů a nechcete ručně reprodukovat request na každý z nich? Managed varianta tuhle celou kategorii práce odstraní.

Pro širší kontext si můžete projít i související benchmarky: kompletní srovnání open-source scraperů, recenzi crawleru Colly bez prohlížeče v Go a recenzi adaptivních selektorů Scrapling.

Závěr

Měli byste používat Scrapy? Ano — pokud jste vývojář, který chce kontrolu a souhlasí s filosofií: neren­deruj stránku, najdi request, který za ní stojí. V testování se tahle myšlenka potvrdila přesně tak, jak slibuje. Katalog v JavaScriptu dal HTTP fetcheru 0 karet; JSON API, které ho živilo, vydalo stejnému spideru všech 8 položek. Statická extrakce trefila 12/12, selektory článku udržely 3/3 odstavce bez boilerplate, crawl graf respektoval limit hloubky napříč 11 stránkami a 500 se vrátil jako ošetřený status místo pádu.

Jen je potřeba správně nastavit očekávání. Scrapy neren­deruje JavaScript a API za vás nenajde — ten reflex si musíte vybudovat sami. Závislostní stack je pořádný a na zvláštních platformách umí kousnout, i když tady proběhla instalace čistě. A protože jsem testoval fixture a demo weby, ne tisícistránkový crawl, berte příběh o škálování jako slibný, ale zatím neprokázaný. Uvnitř těchto hranic je Scrapy nástroj, který se nejlépe hlásí k tiché, ale dost radikální myšlence: nejrychlejší cesta skrz webovou stránku často vůbec nevede skrz stránku samotnou.

Vyzkoušet Thunderbit pro extrakci webových dat Get Started Free

Časté dotazy

Umí Scrapy scrapovat stránky vykreslované JavaScriptem? Ne s výchozím HTTP fetcherem — v mém testu vracel 0 uzlů jak na JS fixture, tak na veřejné JS stránce Quotes, protože stahuje HTML bez spuštění prohlížeče. Zamýšlený postup je najít datový request, který stránka používá na pozadí, a jít přímo na něj; v mém testu JSON API za JS katalogem vydalo všech 8 položek. U stránek bez reprodukovatelného requestu si musíte headless browser připojit sami.

Co přesně znamená „reprodukovat request“? Většina dynamických stránek načítá data na pozadí z JSON API a pak je vykreslí na klientovi. Místo toho, abyste spouštěli prohlížeč a jen sledovali, co se děje, otevřete síťovou záložku, najdete ten API call a nasměrujete na něj Scrapy přímo. Je to rychlejší a stabilnější než renderování — kontrakt API se láme méně často než DOM — ale je to ruční práce a Scrapy ten endpoint samo nevyhledá.

Je instalace Scrapy složitá? U mě byla bez problémů — pip install Scrapy==2.17.0 proběhl bez kompilace v čistém venv na macOS a použily se binární wheel balíčky. Tahá ale s sebou velký stack (Twisted, lxml, cryptography, pyOpenSSL, parsel, tldextract) a oficiální dokumentace pořád upozorňuje na platformní problémy se závislostmi u některých systémů, takže s tím počítejte, pokud běžíte na něčem neobvyklém.

Jaké výstupní formáty Scrapy podporuje? Feed exporty podporují JSON, JSON Lines, CSV a XML rovnou z krabice — stačí nasměrovat spider do souboru a položky se serializují bez dalšího kódu. V mém běhu jeden spider vytvořil JSON i CSV v jednom průchodu. Jen pozor: exportují se pole, která jste vybrali; stránku to automaticky nevyčistí do Markdownu.

Je Scrapy zdarma pro komerční použití? Ano, používá licenci BSD-3-Clause, která je permissive a komerčně přívětivá. Stejně ale před nasazením vždy zkontrolujte aktuální licenci v repozitáři a dbejte na rozumné nastavení user-agentu, proxy a rate limitů — schopnost ještě není oprávnění.

Ke
Ke
CTO ve Thunderbit | Senior Data Scientist a expert na ML S téměř desetiletou zkušeností v oblasti strojového učení a datové vědy je Ke Shen absolventem Kolumbijské univerzity a bývalým Senior Data Scientist ve Walmart Labs. Díky hlubokým odborným znalostem v Pythonu, R, Javě a statistice, uznávaným i mezi kolegy, sdílí ověřené poznatky o tom, jak převést složité AI algoritmy od teorie až k produkční architektuře.

Vyzkoušej Thunderbit

Získej leady i další data jen na 2 kliknutí. Pohání AI.

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