Colly recenze: statické HTML, přímé JSON a hranice prohlížeče

Naposledy aktualizováno August 17, 2026
Colly recenze: statické HTML, přímé JSON a hranice prohlížeče
AI shrnutí
Vytvořil jsem testovací stránku, abych prověřil část Colly, na kterou neodpoví počet stránek ani pověst rychlosti: zda jeho callbacky vytáhnou očekávané záznamy, předají HTTP chybu do správného handleru, projdou ohraničený graf odkazů a zpřístupní obsah, který se nevykresluje přímo v HTML. Tohle nebyl benchmark výkonu, ale test správnosti a hranic použití. Na kontrolovaných testovacích datech Colly vytáhl všechny očekávané statické záznamy, přesměroval jednu odpověď 500 do OnError a navštívil 17 URL v grafu s omezenou hloubkou. Na dvou stránkách, kde se prvky objevily až po spuštění JavaScriptu, vrátil nulový počet cílových elementů.

Vytvořil jsem testovací fixture web, abych prověřil tu část Colly, na kterou samotný počet stránek nebo pověst rychlosti neodpoví: jestli jeho callbacky vytáhnou očekávané záznamy, předají HTTP chybu správně do obsluhy, projdou omezený graf a zpřístupní i obsah dodaný mimo vykreslené HTML. Tohle byla kontrola správnosti a hranic, ne benchmark propustnosti.

Na řízených fixturech Colly vytáhl všechny očekávané statické záznamy, jednu odpověď se stavem 500 přesměroval do OnError a v grafu s omezenou hloubkou navštívil 17 URL. Na dvou stránkách, kde se prvky objevily až po spuštění JavaScriptu, vrátil nula cílových elementů. Přímo dostupný JSON endpoint fungoval i bez prohlížeče, což je důležitý rozdíl oproti renderování klientského rozhraní.

Co Colly vlastně je

Colly single Go binary

Colly se popisuje jako „elegantní framework pro scraping a crawling v Golangu“ — a ten popis je přesnější, než se na první pohled zdá. Jde o Go knihovnu s přibližně 25 300 hvězdičkami na GitHubu a 1 850 forky, licencovanou pod Apache-2.0. Není to CLI nástroj, který stáhneš a jen nasměruješ na URL. Píšeš v Go, importuješ Colly, zaregistruješ několik callbacků a celý program zkompiluješ do jednoho spustitelného souboru.

Mentální model je event-driven. Na Collector připojuješ handlery: OnHTML spouští extrakční logiku pro odpovídající CSS selektory, OnResponse předává syrové tělo odpovědi a OnError řeší selhání požadavků. Handlery pro odkazy volají Visit() na nalezených URL, zatímco MaxDepth omezuje průchod grafem. Pro tyto čistě HTTP cesty nepotřebuje cílový hostitel samostatně nainstalované Go runtime ani prohlížeč; zda je výsledný binární soubor plně statický, závisí na build flags a použití CGO, což tenhle test nezaznamenával.

Klíčové funkce a jak fungují pod kapotou

System diagram: Key features, and how they run under the hood

Klíčové je rozumět callback modelu, protože právě ten dělá Colly odlišným od jednoduchého skriptu typu request plus parse. Všechny testy, které jsem spustil, stály na třech callbackách.

OnHTML(selector, handler) je hlavní pracovní nástroj. Zaregistruješ ho třeba pro .product nebo article p a Colly pak při parsování DOM zavolá handler pro každý odpovídající element. Tady se dělá strukturovaná extrakce — místo psaní parse smyčky jen popisuješ, co chceš získat.

OnResponse(handler) je o úroveň níž a vrací syrová data. Když server vrátí JSON místo HTML, DOM úplně přeskočíš a tělo si sám deserializuješ. Právě díky tomuto jedinému callbacku Colly v mém testování bez problémů pracoval i s JSON API, aniž by sáhl na HTML parsing.

OnError(handler) obsluhuje selhání požadavků a může předat volajícímu i HTTP status. V tomhle testu se jedna fixture odpověď se stavem 500 dostala do registrovaného callbacku. Retries, timeouty, DNS chyby, reset spojení, paniky v callbacku, persistence ani alerting testované nebyly.

Nad callbacky stojí ještě dvě provozní vlastnosti. MaxDepth omezuje průchod odkazů podle Colly depth semantiky. Zkompilovaný Go program navíc nepotřebuje na cílovém hostu zvlášť instalované jazykové runtime. Tenhle běh nezaznamenával build flags ani stav CGO, takže netvrdí, že každý výsledný binár je plně statický.

Nastavení: potřebný Go toolchain

Závislosti jsou krátké, ale reálné, takže je zmíním hned, než se pustíš do instalace. Stroj, na kterém jsem testoval, Go neměl vůbec a Colly je Go knihovna — první krok tedy byl nainstalovat Go toolchain (přes Homebrew jsem instaloval Go 1.26.5). Pokud váš tým v Go už nežije, tohle je ta skutečná třecí plocha: ne Colly samotný, ale prostředí, které potřebuje, než se zkompiluje jediný řádek.

Jakmile bylo Go připravené, go get github.com/gocolly/colly/v2 se vyřešilo na verzi v2.3.0. Testované cesty nepotřebovaly žádný prohlížeč ani headless Chrome.

Jedna verze může čtenáře mást. Go modul se vyřešil na v2.3.0 (publikováno v prosinci 2025), zatímco v GitHub Releases UI byla při kontrole vidět nejnovější položka v2.2.0 (březen 2025). Ten rozdíl je mezi verzí modulu/repozitáře a položkou GitHub Release, ne mezi modulem a Git tagem. Testoval jsem v2.3.0.

Prakticky: extrakce a provozní hranice

Colly static and JSON results

Colly jsem spustil proti soběstačnému fixture serveru (Go httptest) a dvěma veřejným ukázkovým webům. Aktuální benchmark adresář a results/colly-test-summary.json obsahují artefakty, ale oba odkazy míří na měnící se větev. Článek neuvádí testovaný commit, přesný příkaz, build flags ani seed fixture, takže nejde o neměnný recept na reprodukci.

TestCílVýsledek
Statický katalog + stránkovánílokální fixture12/12 očekávaných produktů získáno
Extrakce článkulokální fixturenázev + 3/3 odstavce
Přímá JSON odpověďlokální fixture8/8 očekávaných položek přes OnResponse
Zpracování HTTP 500lokální fixturepředáno do OnError, status 500
Crawl graf (MaxDepth 2)lokální fixture17 stránek
Books to Scrapeveřejná ukázka20 produktů
Dynamická stránka (bez JS)lokální fixture0 karet (očekáváno)
Quotes JS (bez renderování)veřejná ukázka0 (očekáváno)

Na kontrolovaných statických fixturech vrátily nastavené selektory všech 12 očekávaných produktových záznamů a všechny tři očekávané odstavce článku. Přímá JSON odpověď vůbec nepoužila HTML parser: OnResponse dodal tělo a harness dekódoval všech osm očekávaných položek. Jediná 500 fixture se dostala do OnError se zobrazeným statusem a tenhle běh nespadl; to ale samo o sobě nedokládá unattended spolehlivost. Na veřejné stránce Books to Scrape selektor vrátil 20 produktů jako základní veřejný smoke test.

Pro průchod grafem byl collector nastaven na MaxDepth(2) podle seed-depth konvence harnessu a navštívil 17 URL ve fixture grafu. Jde o pokrytí crawl, ne o rychlost. Pozorovaný trace — nikoli obecné tvrzení o libovolných grafech — je v results/local_crawl_graph.json.

Colly JavaScript zero result

Colly JavaScript nespouští. Fixture renderovaný přes JavaScript vrátil 0 cílových karet a veřejná stránka Quotes to Scrape JS vrátila 0 cílových citací. Pokud se elementy objeví až po spuštění v prohlížeči a neexistuje žádný dostupný backend endpoint, HTTP-only cesta tyto prvky jako renderovaný DOM neuvidí. Buď ji propojte s rendererem, nebo pokud je k dispozici, volejte přímo backend endpoint — přesně jak ukazuje JSON fixture.

Netestoval jsem async collector, rate limiting ani politeness konfiguraci, rotaci proxy, retries, ani queue a storage backendy. Neměřil jsem čas běhu, throughput, concurrency, CPU, paměť, latenci cíle ani srovnávací baseline. Tenhle článek tedy netvrdí nic o rychlosti ani o unattended spolehlivosti.

Jak výsledky z fixture interpretovat

Tři úspěšné cesty obsahu ověřují různé kontrakty. Katalogový a článkový scénář testují CSS selekci nad HTML vráceným serverem. Jmenovatele jsou očekávání fixture napsaná před extrakcí: dvanáct produktových záznamů a tři odstavce článku. Označit to jako „získány očekávané záznamy“ je záměrné. Běh nedefinuje fuzzy matching, práci s duplikáty, toleranci částečných polí ani metriku recall pro celý korpus, takže výsledek by se neměl vydávat za obecnou přesnost extrakce.

JSON scénář DOM selekci obchází. Colly dostane bajty odpovědi přes OnResponse a harness provede JSON dekódování. Proto tvrzení „Colly nespouští JavaScript“ neznamená, že každý web řízený klientem je nedosažitelný. Pokud datový zdroj, který klient používá, je přímo volatelný endpoint a požadavek je reprodukovatelný mimo prohlížeč, HTTP crawler může stačit. Autentizace, generované podpisy, browser-only stav a anti-bot ochrany ale mohou odpověď změnit; nic z toho zde testováno nebylo.

Trasa 500 testuje dispatch, ne zotavení. Ukazuje, že registrovaný callback OnError dostal fixture odpověď i její status. Produkční crawler stále potřebuje jasnou politiku pro retryovatelné kódy, backoff, konečné chyby, persistenci a alerting. Tenhle test nedává důkaz pro tato rozhodnutí a „callback se spustil“ neznamená „job je bezpečný bez dozoru“.

Colly depth-2 crawl graph

Graf s 17 URL je stejně úzký. Potvrzuje jen množinu navštívených URL pro tuhle fixture, tuhle seed konvenci a MaxDepth(2). Neprokazuje počet stránek za sekundu, férovost napříč hosty, růst paměti ani chování při cyklech a různých podobách duplicitních URL. To vyžaduje samostatné workload a queue testy.

Kontrolní seznam výběru opřený o tenhle běh

Začni tím, co Colly skutečně dostává v odpovědi. Pokud jsou potřebná pole v HTML vráceném serverem, použij OnHTML a před přijetím záznamu ověř počty polí nebo povinné klíče. Pokud je odpověď JSON, zpracuj tělo přes OnResponse a ověř schéma. Pokud je HTML jen aplikační shell, zjisti, zda dostupný backend request neobsahuje data, ještě než přidáš prohlížeč.

Co odpověď obsahujeCesta v CollyKontrolní kritérium
Povinná pole v HTML vráceném serveremselektory OnHTMLPovinné klíče a očekávaný počet záznamů
Přímo volatelné JSON payloadyOnResponse + JSON dekódováníOvěření schématu a povinných polí
HTML shell s reprodukovatelným requestem v pozadívolejte backend endpointStatus odpovědi, schéma a úplnost
Data vzniklá až po spuštění v prohlížečipřidejte renderer nebo zvolte browser crawlerPřipravenost a úplnost pro daný cíl

Když je potřeba spuštění v prohlížeči, ber ho jako další komponentu, ne jako něco, co se zapne jedním přepínačem Colly. Prohlížeč musí zajistit připravenost, zpřístupnit vyrenderovaný obsah nebo backendové odpovědi a předat data do zbytku pipeline. Tahle recenze takovou integraci netestovala.

Při nasazení si zaznamenej verzi Go, verzi modulu, build flags, stav CGO, přesný příkaz, seed fixture a commit v repozitáři. Tyto detaily v aktuálních publikačních odkazech chybí a právě to odděluje dohledatelné artefakty od trvale reprodukovatelného výsledku. Pro provoz přidej matici chyb a změř workload, který tě skutečně zajímá, dřív než systém označíš za rychlý nebo spolehlivý.

Klady a zápory

Klady:

  • Přes OnHTML získal 12/12 očekávaných produktů katalogu a 3/3 očekávané odstavce článku.
  • Čisté zpracování JSON přes OnResponse, bez nutnosti parsovat DOM — 8/8 položek z API.
  • Testovaná odpověď 500 dorazila do OnError se zobrazeným statusem.
  • Crawl s omezenou hloubkou dosáhl ze jednoho collectoru na 17 stránek.
  • Kompiluje se do Go binárky; pro testované cesty cílový stroj nepotřebuje samostatně nainstalované Go runtime.
  • Permisivní licence Apache-2.0.

Zápory:

  • Žádné spuštění JavaScriptu — klientsky renderovaný obsah vrací 0, tečka.
  • Vyžaduje Go toolchain; týmy mimo Go platí tenhle setup ještě před napsáním jediného scraperu.
  • Testovaný modul (v2.3.0) je napřed oproti nejnovější pozorované položce GitHub Release (v2.2.0).
  • Výstup je váš vlastní kód — Colly vám dává callbacky, ne vestavěný dataset nebo exportér feedů jako Scrapy.
  • Async, rate limiting, proxy a queue backendy existují, ale tady nebyly testované; throughput a škála zůstaly nezměřené.

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

Colly no-browser boundary

Colly dává smysl, pokud už píšeš v Go a cílíš na server-renderované HTML nebo přímo dostupný JSON. Callback model odděluje strukturované shody, syrové payloady a selhání požadavků. Zkompilovaný executable navíc eliminuje potřebu samostatně instalovaného jazykového prostředí na cílovém stroji, i když plně statické linkování tady nebylo ověřeno.

Renderer přidej tehdy, když se požadované prvky objeví až po spuštění prohlížeče a neexistuje použitelný backend endpoint. Přímý JSON endpoint lze pořád volat bez renderování. Colly je také slabší volba pro týmy, které nechtějí Go toolchain, nebo chtějí, aby služba pro extrakci sama řešila strukturu schématu a údržbu selektorů.

Alternativy, včetně toho, kde dává smysl Thunderbit

Colly je open-source software, který provozuješ sám. Nemá licenční poplatek vůči dodavateli, ale náklady na compute, bandwidth, proxy, storage, observability i engineering jsou na tobě. Ty vlastníš chování requestů, parsovací callbacky, crawl logiku a integraci s prohlížečem, pokud cíl vyžaduje renderování.

Managed extraction service přesouvá část těchto odpovědností na vendor. My vyvíjíme Thunderbit, ale netestovali jsme ho proti těmto fixturem, takže tenhle článek nedělá žádné srovnání renderování, anti-bot ochrany, kvality, latence ani ceny. Důležitý rozdíl je v odpovědnosti: Colly vrací HTTP odpovědi a callbacky ve tvém Go procesu; managed služba může převzít akvizici i tvorbu schématu za poplatek za každý požadavek.

Související benchmark recenze: celé srovnání open-source scraperů, recenze Python crawleru Scrapy a recenze adaptivního selektoru Scrapling.

Vyzkoušejte Thunderbit pro extrakci webových dat

Verdikt

Colly je silný kandidát pro Go týmy, které cílí na server-renderované HTML nebo přímý JSON a jsou ochotné vlastnit vlastní extrakční kód. Fixture testy potvrzují získání očekávaných záznamů, jednu omezenou crawl trasu a jednu pozorovanou 500 callback událost — ne rychlost, škálu ani unattended spolehlivost. DOM renderovaný v prohlížeči vyžaduje jinou cestu, pokud není možné volat přímo datový endpoint pod povrchem.

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

Časté dotazy

Měřila tahle recenze rychlost Colly? Ne. Měřila získání očekávaných záznamů, přímé zpracování JSON, jeden error callback a pokrytí fixture crawl grafu. Neměřila čas běhu, throughput, concurrency, CPU, paměť ani srovnávací baseline.

Umí Colly scrapovat stránky renderované přes JavaScript? Colly JavaScript nespouští. Testovaná HTTP cesta tedy nenašla žádné cílové elementy, které existovaly jen v renderovaném DOM. Pořád ale může přímo požádat o dostupný backend JSON endpoint, jak ukazuje JSON fixture. Když je spuštění nutné a neexistuje reprodukovatelný backend request, použij renderer.

Musím umět Go, abych Colly použil? Ano. Colly je Go knihovna, ne samostatné CLI — importuješ ji, registruješ callbacky (OnHTML, OnResponse, OnError) a zkompiluješ ji. Stroj, na kterém jsem testoval, Go neměl, takže instalace začala přidáním Go toolchainu (1.26.5). Pokud váš tým v Go už není, tohle je skutečná cena za nastavení.

Proč se verze, kterou instaluji, neshoduje s nejnovějším GitHub releasem Colly? Go modul se vyřešil na v2.3.0 (prosinec 2025), zatímco nejnovější pozorovaná položka GitHub Release byla v2.2.0 (březen 2025). Testoval jsem v2.3.0; jde o rozdíl mezi verzními plochami, ne o důkaz vadné instalace.

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

Před nasazením do produkce přidej testy odpovídající provoznímu riziku, ne jen analogické rozšíření výsledků z fixture. Změř opakované crawly na reprezentativních cílech, zaznamenej CPU a špičkovou paměť, otestuj retryovatelné i konečné chyby a ověř ohleduplné chování při konkurenci. Pokud záleží na persistenci, zastav a obnov crawl a sleduj práci s duplikáty i stav fronty. Pokud je důležitá jednoduchost nasazení, zaznamenej přesnou konfiguraci kompilátoru a linkeru a zkontroluj runtime závislosti výsledné binárky. Nic z toho nemění, co prokázala současná fixture; jen to určuje, jestli se stejná konfigurace knihovny hodí pro konkrétní produkční úlohu.

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.
Obsah
Thunderbit · AI agent pro webová data

Extrahuj data z libovolné stránky za 1 kliknutí

Důvěřuje mu více než 250 000 uživatelů
k dispozici bezplatný plán
Z webové stránky do tabulky
Popiš, co potřebuješ — AI agent Thunderbit to nasbírá a exportuje do Excelu, Google Sheets, Airtable nebo Notion. Začni zdarma.
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week