Otestoval jsem Colly na 17 stránkách bez připojeného prohlížeče — tady je, co ve skutečnosti znamená „rychlý Go scraper“

Poslední aktualizace July 17, 2026
Otestoval jsem Colly na 17 stránkách bez připojeného prohlížeče — tady je, co ve skutečnosti znamená „rychlý Go scraper“
Shrnutí od AI
Tato recenze Colly testuje Go crawler na stejných benchmarkových testech, které se používají napříč sérií o open-source scraperech. Potvrzuje silné stránky Colly u úloh založených na HTTP: extrakci statického katalogu, parsování článků, zachycení JSON API, zpracování chyb i crawl graf s omezenou hloubkou. Zároveň jasně vymezuje hranici nástroje: Colly nenačítá JavaScript, takže stránky závislé na JS v testech vrátily nulu. Výsledkem je věcný obraz Colly jako rychlého a lehkého crawleru pro server-renderované stránky a API, nikoli jako frameworku pro automatizaci prohlížeče nebo univerzální moderní web scraper.

Když zadáš do vyhledávání „Colly“, první přídavné jméno je skoro vždycky stejné: rychlý. Rychlý Go crawler, rychlý proto, že se kompiluje, rychlý proto, že ho nezdržuje prohlížeč. Téměř nikdo k tomu ale nepřidá konkrétní čísla.

Tak jsem to přestal brát jen jako dojem. Postavil jsem malý testovací web, zkompiloval na něj Colly a sledoval, co knihovna skutečně dělá — jakou má úspěšnost na reálných stránkách, jak zachází s neúspěšným požadavkem, kam až dojde crawl s omezenou hloubkou. Stručně řečeno před samotnými čísly: statická extrakce měla plnou úspěšnost, chyba 500 skončila přesně tam, kde měla, a crawl s limitem hloubky se dostal na 17 stránek z jediného statického binárního souboru bez připojeného prohlížeče. Knihovna navíc vracela čistou nulu u všeho, co bylo renderované přes JavaScript — což je mimochodem přesně ta část, kterou oslavy „rychlosti“ často přehlížejí.

Co Colly ve skutečnosti je a co není

Colly single Go binary

Colly se prezentuje jako „elegantní scraper a crawler framework pro Golang“ — a tahle jedna věta je důležitější, než se na první pohled zdá. Jde o Go knihovnu — přibližně ~25,4 tisíce hvězdiček k 2026-07-09 na gocolly/colly, s licencí Apache-2.0. Není to žádný příkazový nástroj, který stáhneš a nasměruješ na URL. Píšeš Go kód, importuješ balíček, napojíš několik callbacků a výsledek zkompiluješ do jednoho spustitelného souboru.

Mentální model je událostně řízený, a to umí zaskočit lidi zvyklé na styl „požadavek a parsování“. Neprocházíš odpověď řádek po řádku a netrháš z ní data ručně. Připojíš handlery na Collector a necháš knihovnu, aby je spouštěla při procházení stránek. OnHTML spustí tvůj extrakční kód pokaždé, když se objeví odpovídající CSS selektor. OnResponse ti předá syrové tělo odpovědi, což je důležité ve chvíli, kdy payload není HTML, ale JSON. OnError zachytí požadavky, které selžou. Stejně funguje i crawling: uvnitř handleru pro odkazy zavoláš na nalezené URL Visit(), Colly si je zařadí do fronty a MaxDepth rozhodne, jak daleko se smí vydat. Callbacky, fronta návštěv, omezení hloubky, zkompilovaný statický výstup. Žádný interpret, žádný runtime, žádný headless Chrome běžící v paměti.

Callback model a proč mění pocit z extrakce

Callbacky jsou celá osobnost tohohle nástroje, takže stojí za to se u nich na chvíli zastavit. Při všech testech, které jsem dělal, hrály hlavní roli tři.

OnHTML(selector, handler) je ten, který použiješ nejčastěji. Zaregistruješ ho třeba na .product nebo article p a Colly zavolá tvůj handler jednou pro každý odpovídající prvek při parsování DOMu. Tady žije strukturovaná extrakce a čte se dobře — popisuješ, co chceš, ne smyčku, která to tahá ven.

OnResponse(handler) je o úroveň níž a dá ti přímo syrová data z odpovědi. Když cílový web vrací JSON místo značek, DOM vůbec neřešíš — tělo si sám zdeserializuješ. Právě tenhle callback je důvod, proč Colly v mém testu zvládl JSON API bez toho, aby se dotkl HTML parseru.

OnError(handler) je callback, na který každý zapomene, dokud scraper nezačne v jednu ráno padat. Spustí se při selhání požadavku a předá ti odpověď, takže si můžeš přečíst status code a rozhodnout, co dál. Crawler, který chyby tiše přejde, je horší než ten, který spadne nahlas; Colly nedělá ani jedno, a to je ve chvíli, kdy job běží bez dozoru, mnohem důležitější, než to na první pohled vypadá.

Nad těmito callbacky stojí ještě dvě vlastnosti, které jsou provozně důležité. MaxDepth omezuje hloubku crawlů, takže collector sledující odkazy skončí po dvou krocích místo toho, aby obcházel celý otevřený web. A výstupem je jeden statický Go binárník — zkompiluješ jednou, dostaneš jeden soubor bez runtime závislostí, hodíš ho na server nebo do CI jobu a spustíš. Jestli jsi někdy přišel o celé odpoledne kvůli Python virtualenvu na čerstvém stroji, tenhle způsob nasazení působí spíš jako výhoda než jako drobná poznámka pod čarou.

Nastavení — Go toolchain, o kterém se moc nemluví

Příběh závislostí je krátký, ale má jeden skutečný háček, takže ho řeknu hned, než budeš cokoli instalovat. Stroj, na kterém jsem testoval, neměl Go vůbec, a protože Colly je Go knihovna, první krok byl nainstalovat toolchain — přes Homebrew jsem dal do systému Go 1.26.5. Pokud váš tým už v Go nežije, tohle je skutečná třecí plocha. Ne knihovna. Ale jazykové prostředí, které potřebujete, aby se zkompilovala jediná řádka.

Jakmile bylo Go nainstalované, stažení Colly proběhlo hladce. go get github.com/gocolly/colly/v2 bez problémů vyřešilo verzi v2.3.0 — žádný browser, žádný headless režim, nic navíc kromě výsledného binárního souboru. Ve srovnání s Python scrapery, které si nejdřív natahají parser a pak se při prvním fetchi rozpadnou kvůli chybějícím extra balíčkům, to působilo příjemně nudně. A nudné je tady pochvala.

Ještě jedna přesná poznámka, protože pokud po tom půjdeš hlouběji, určitě tě to zmate. Nejnovější modul na Go proxy je v2.3.0, publikovaný v prosinci 2025. Nejnovější označené vydání na GitHubu je v2.2.0 z března 2025. Testovaný kód — v2.3.0 — je tedy dál než to, co ukazuje stránka Releases v repozitáři. Není to chyba, jen běžný rozestup mezi Go moduly a GitHub tagy. Tak se nelekej, až ti go get a stránka Releases budou ukazovat jiná čísla.

Praktický test — čísla za slovem „rychlý“

Colly jsem spouštěl na samostatném testovacím serveru postaveném na httptest z Go, plus na dvou veřejných demo webech, takže chování je reprodukovatelné a není to jen historka, kterou si vymýšlím. Tady je, co vypadlo.

Colly static and JSON results

TestCílVýsledek
Statický katalog + stránkovánílokální test12/12 produktů, úspěšnost 1.0
Extrakce článkulokální testnadpis + 3/3 odstavce
Dynamické JSON APIlokální test8/8 položek přes OnResponse, úspěšnost 1.0
Zpracování HTTP 500lokální testpředáno do OnError, status 500
Crawl graf (MaxDepth 2)lokální test17 stránek
Books to Scrapeveřejné demo20 produktů
Dynamická stránka (bez JS)lokální test0 karet (očekávané)
Quotes JS (bez renderu)veřejné demo0 (očekávané)

Colly depth-2 crawl graph

Když to čteš shora dolů, obraz drží pohromadě. Statická extrakce byla čistá — 12 z 12 produktů z katalogu, všechny tři odstavce z článku, všechno řízené přes selektory OnHTML. Test JSON API nikdy neotevřel HTML parser: OnResponse předal tělo, já ho zdeserializoval a 8 z 8 položek se vrátilo zpět. Nejvíc se opírám o test s chybou 500, protože právě tam se láme rozdíl mezi crawlerem, který můžeš nechat běžet přes noc, a tím, který ne. Colly poslal chybu do OnError a zpřístupnil status bez pádu i bez tichého ignorování. Na veřejném demo webu Books to Scrape vytáhl 20 produktů bez jakéhokoli speciálního zacházení.

Výsledek crawlů je hlavní pointa, ale chci ho popsat přesně. Collector s MaxDepth(2), který sledoval odkazy a převáděl je na absolutní URL, se v mém testovacím grafu dostal na 17 stránek. Tohle je ta věta, která konečně dává označení „rychlý Go crawler“ konkrétní číslo místo pocitového dojmu. Jen je dobré číst přesně formulaci — 17 stránek při crawl limitu hloubky 2. Ta hodnota hloubky je číslo z mého testovacího harnessu a popisuje, jak jsem běh nastavil; netvrdím tím, že Colly interně garantuje „přesně hloubku 2 a ani odkaz dál“ jako pevný kontrakt. Poctivé a ověřitelné tvrzení zní takto: při omezení hloubky na 2 prolezl crawl graf a dostal se na 17 stránek.

Colly JavaScript zero result

A teď hranice, kde podobné články o „super rychlosti“ obvykle zmlknou. Colly neumí spouštět JavaScript. Nasměroval jsem ho na testovací stránku renderovanou přes JavaScript a dostal jsem zpět 0 karet; zkusil jsem veřejnou stránku Quotes to Scrape JS a dostal jsem 0 znovu. To není chyba a není to výtka. Colly je HTTP crawler — stahuje a parsuje HTML a nikdy nespouští prohlížeč kvůli client-side skriptům. Stejně jako Scrapy a další HTTP-first crawlery, pokud obsah existuje až po vykreslení JavaScriptu, Colly ti pokaždé vrátí prázdný výsledek a žádná surová rychlost na tom nic nezmění. Musíš ho spojit s rendererem, nebo použít nástroj, který renderování prohlížečem má už v základu.

Stejně otevřeně řeknu i to, co jsem netestoval, aby nikdo nepřetahoval závěry za hranice důkazů. Netlačil jsem async collector, konfiguraci pro rate limiting a politeness, rotaci proxy ani queue a storage backendy. Tyhle věci Colly má. Testoval jsem jádro pro extrakci a crawl, ne infrastrukturu pro škálování. README sice slibuje propustnost přes tisíc požadavků za sekundu na jednom jádru, ale to je číslo projektu, ne moje měření — já jsem měřil počet stránek a recall, ne throughput. Když tedy říkám „rychlý“, myslím tím cestu zkompilovaného Go pro extrakci, kterou jsem skutečně změřil, ne head-to-head benchmark proti Scrapy, který jsem neprováděl.

Klady a zápory

Klady:

  • Plná úspěšnost na statické extrakci — 12/12 produktů z katalogu a 3/3 odstavce článku přes OnHTML.
  • Čisté zpracování JSON přes OnResponse, bez potřeby parsovat DOM — 8/8 položek z API.
  • Správné směrování chyb — 500 skončila v OnError se zobrazeným statusem, žádný pád.
  • Crawl s omezenou hloubkou se dostal na 17 stránek z jediného collectoru.
  • Jeden statický Go binárník, nulové runtime závislosti — výborný provozní a nasazovací profil.
  • Přívětivá licence Apache-2.0.

Zápory:

  • Bez JavaScriptu — klientsky renderovaný obsah vrací prostě 0, bez výjimky.
  • Vyžaduje Go toolchain; týmy, které už v Go nepracují, zaplatí nastavení ještě před napsáním prvního scrapu.
  • Nejnovější modul (v2.3.0) je napřed před nejnovějším tagovaným releasem (v2.2.0), což může zmást každého, kdo sleduje stránku Releases.
  • Výstup si musíš postavit sám v kódu — Colly dává callbacky, ale ne hotový dataset ani exportér feedu jako třeba Scrapy.
  • Async, rate limiting, proxy i queue backendy sice existují, ale tady jsem je netestoval; „rychlý“ je tedy jen extrakční path, kterou jsem změřil, ne přímé srovnání propustnosti.

Pro koho je Colly vhodný — a kdo by se mu měl vyhnout

Colly no-browser boundary

Colly dává smysl, pokud už píšeš v Go a chceš rychle crawlovat weby postavené na HTML nebo JSON. Jestli je pro tebe čisté nasazení takové, že zkopíruješ jeden binárník na server a spustíš ho — bez interpretu, bez virtualenvu, bez loterie se závislostmi — byl ten nástroj navržen přesně pro tenhle způsob práce. Callback model se vyplatí hned ve chvíli, kdy se extrakce přestane chovat triviálně: OnHTML pro strukturu, OnResponse pro syrový payload, OnError pro chyby, které bys jinak vůbec neviděl. Pro statické nebo API-backed cíle, které spouštíš podle rozvrhu v CI, je to silná a bezproblémová volba.

Vyhni se mu, nebo k němu aspoň přidej druhý nástroj, když tvoje cíle stojí na JavaScriptu. Colly v mém testu vrátil na každé klientsky renderované stránce nulu, a to je záměr, ne přepínač, který lze zapnout. Stejně tak se mu vyhni, pokud tvůj tým nepracuje v Go a nechceš kvůli pár webům stavět celý toolchain — ten jazykový závazek je reálný a budeš ho spravovat ty. A pokud chceš strukturovaná data dostávat hotová, ne je skládat vlastním kódem, pak jsou callbacky Colly přesně práce navíc, kterou si budeš muset odnést na svou stranu plotu.

Alternativy — kde dává smysl spravované AI scraping API

Colly je bezplatná open-source knihovna, kterou si sám zkompiluješ a provozuješ. Kód v Go, callbacky, crawl logiku i stroj, na kterém běží, máš plně pod kontrolou — a na oplátku neplatíš za každý request a všechno držíš uvnitř firmy. Pro Go tým je to dobře obhajitelné řešení a nasazení v podobě jediného binárního souboru je opravdu příjemné.

Jsou tu ale dvě místa, kde se to láme a kde má smysl porovnávat to s něčím jiným. Za prvé JavaScript — Colly ho nenačítá, takže vše client-side je mimo hru, pokud k němu nepřidáš browser. Za druhé struktura — Colly ti dává callbacky a čistý výstup si musíš složit sám. Spravované AI scraping API na obojí odpovídá jinak. Vývojářský stack Thunderbit zajišťuje renderování JS a vrací strukturovaná data na straně serveru. POST /distill převede stránku do čistého Markdownu připraveného pro LLM, a to i s dynamickým obsahem a ochranou proti botům. POST /extract vrací strukturované JSON podle JSON Schema, které si definuješ, a renderMode můžeš přepnout až na plné browser renderování, když je to potřeba. Pro AI agenty a coding asistenty je k dispozici Thunderbit MCP server — thunderbit_suggest_fields je zdarma, takže si můžeš předem ověřit, co stránka nabízí, než se rozhodneš — a také CLI, které spustíš přes npx @thunderbit/thunderbit-cli pro terminál, CI i cron.

Vyzkoušet Thunderbit pro extrakci webových dat

Rozdíl není v tom, co je lepší a co horší. Jde o to, kde ta práce probíhá. S Colly si necháváš renderování (žádné), parsování i údržbu uvnitř vlastního zkompilovaného binárního souboru, bez nákladů na jeden request, a staráš se o něj sám, když web změní strukturu. Se spravovaným API předáš renderování JS, anti-bot ochranu i strukturovaný výstup, a za to platíš per call. Malé HTML- nebo JSON-based cíle v Go, které chceš vlastnit a udržovat sám? Tam vyhrává kontrola a rychlost Colly. Stránky nabité JavaScriptem, nebo prostě chceš dostávat JSON odpovídající schématu místo psaní dalšího callbacku? To je případ pro spravovanou cestu. Pokud chceš širší přehled trhu, nejlepší web scraping tools a best web scraping GitHub projekty ukazují, kam se Colly řadí vedle browser-based a managed řešení.

Verdikt

Máš používat Colly? Ano — pokud programuješ v Go a crawlíš HTML nebo JSON rychle, dělá přesně to, co slibuje pověst „rychlého crawleru“, a tentokrát už za tím ta pověst opravdu stojí na číslech. Plná úspěšnost na statické extrakci. Čistý JSON přes OnResponse. Chyba 500 správně předaná do OnError místo toho, aby zmizela. Crawl s hloubkou 2, který dosáhl na 17 stránek. Všechno zkompilované do jednoho statického binárního souboru bez runtime závislostí, což je v celé téhle kategorii asi nejpřívětivější příběh nasazení.

Je ale potřeba ta tvrzení chápat přesně. JavaScript nerenderuje — každá client-side stránka v mém testu vrátila 0, a to je trvalý stav, ne něco, co jsi přehlédl v konfiguraci. Vyžaduje Go toolchain, takže týmy mimo Go zaplatí vstupní náklady předem. Modul, který instaluješ (v2.3.0), je napřed před nejnovějším tagovaným releasem (v2.2.0), takže se nelekej, když se čísla na různých stránkách neshodují. A „rychlý“ tady znamená cestu extrakce, kterou jsem změřil, ne throughput benchmark, který jsem neprováděl. V rámci těchto hranic je Colly rychlý, spolehlivý a opravdu nasaditelný Go crawler — a své pověsti dostojí ve chvíli, kdy po něm přestaneš chtít spouštět JavaScript.

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

Časté dotazy

Je Colly opravdu rychlý a existuje pro to nějaké číslo? Rychlý je v tom smyslu, který je důležitý pro jádro testovaného procesu: zkompilované Go, plná úspěšnost na statické extrakci (12/12 produktů z katalogu), čisté zpracování JSON a crawl s hloubkou 2, který dosáhl na 17 stránek — a to vše z jediného statického binárního souboru. Co jsem ale netestoval, je throughput benchmark proti Scrapy, takže „rychlý“ ber jako změřené chování extrakce, ne jako přímé rychlostní skóre.

Dokáže Colly scrapovat stránky renderované přes JavaScript? Ne. Colly je HTTP crawler — HTML stáhne a parsuje, ale prohlížeč nespouští. Testovací stránka renderovaná JavaScriptem vrátila 0 karet a stejně dopadla i veřejná stránka Quotes JS. Pro client-side obsah musíš Colly spojit s rendererem nebo použít nástroj, který browser rendering obsahuje už v základu.

Musím umět Go, abych mohl Colly používat? Ano. Colly je Go knihovna, ne samostatný CLI nástroj — importuješ ji, registruješ callbacky (OnHTML, OnResponse, OnError) a zkompiluješ. Stroj, na kterém jsem testoval, Go vůbec neměl, takže nastavení začalo instalací toolchainu (1.26.5). Pokud váš tým už v Go nepracuje, právě tohle prostředí je reálná vstupní cena.

Proč se verze, kterou instaluji, neshoduje s posledním GitHub releasem Colly? Protože se Go modul a GitHub release tag časem rozjeli každý jinam. Nejnovější modul na Go proxy je v2.3.0 (prosinec 2025), zatímco nejnovější označené vydání na GitHubu je v2.2.0 (březen 2025). Testoval jsem v2.3.0. Je to prostě rozdíl mezi moduly a tagy, ne rozbitá instalace.

Je Colly zdarma pro komerční použití? Ano, pod licencí Apache-2.0, která je velmi volná a komerčně přívětivá. Jako vždy si ale před nasazením ověř aktuální licenci přímo v repozitáři.

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