Hae sanalla "Colly", ja ensimmäinen kuvaileva sana on lähes aina sama: nopea. Nopea Go-crawler, nopea koska se kääntyy binääriksi, nopea koska selain ei ole hidasteena. Lähes kukaan ei kuitenkaan laita väitteen perään numeroita.
Siksi päätin lopettaa uskomisen pelkän maineen varassa. Rakensin pienen testisivuston, ajoin Collyn sitä vasten ja katsoin, mitä kirjasto todella teki — kuinka hyvin se poimi oikeilta sivuilta, miten se käsitteli epäonnistuneen pyynnön, ja kuinka pitkälle syvyyteen rajattu crawl pääsi. Lyhyt versio ennen numeroita: staattinen poiminta osui täysiin, 500-virhe ohjautui juuri sinne minne pitikin, ja syvyysrajoitettu crawlaus löysi 17 sivua yhdestä staattisesta binääristä ilman selainta. Kirjasto palautti myös siistin nollan kaikesta JavaScriptillä renderöidystä — eli juuri siitä osasta, jonka "nopeus"-hehkutus yleensä ohittaa.
Mikä Colly oikeastaan on — ja mitä se ei ole

Colly kuvaa itseään "elegantiksi scrapers- ja crawler-frameworkiksi Golangille", ja tuo yksi lause kertoo enemmän kuin äkkiä luulisi. Kyse on Go-kirjastosta — noin ~25.4k tähteä 2026-07-09 mennessä gocolly/colly-repossa, Apache-2.0-lisenssillä. Se ei ole komentorivityökalu, jonka lataat ja osoitat URL:iin. Kirjoitat Go-koodia, importtaat paketin, liität muutaman callbackin ja käännät lopputuloksen yhdeksi suoritettavaksi ohjelmaksi.
Ajattelumalli on tapahtumapohjainen, ja se sotkee helposti ihmisen, joka on tottunut pyydä-ja-jäsennä-tyyliin. Et käy läpi responsea ja nosta kenttiä siitä rivi riviltä. Sen sijaan kiinnität handlerit Collectoriin ja annat kirjaston kutsua niitä sivuja läpikäydessään. OnHTML ajaa poimintakoodisi aina, kun vastaava CSS-valitsin löytyy. OnResponse antaa raakasisällön sellaisenaan, mikä on tärkeää silloin, kun payload on JSON eikä HTML. OnError nappaa pyynnöt, jotka kaatuvat. Crawlaus toimii samalla logiikalla: linkkien handlerissa kutsut löydettyjä URL-osoitteita Visit()-metodilla, Colly jonottaa ne, ja MaxDepth määrittää, kuinka kauas se saa vaeltaa. Callbackit, vierailujono, syvyysraja, käännetty staattisesti. Ei tulkkia, ei runtimea, ei muistissa pyörivää headless Chromea.
Callback-malli ja miksi se muuttaa käyttökokemusta
Callbackit ovat koko työkalun persoona, joten niihin kannattaa pysähtyä. Kolme niistä kantoi kaikki testini.
OnHTML(selector, handler) on se, jota käytät eniten. Kun rekisteröit sen .product- tai article p -valitsimelle, Colly kutsuu handleria kerran jokaista osumaa kohden DOMia jäsennettäessä. Tässä elää jäsennelty poiminta, ja se lukee hyvin — kuvaat mitä haluat, et sitä silmukkaa, joka sen hakee.
OnResponse(handler) toimii alemmalla tasolla ja antaa sinulle raakabytit verkosta. Kun kohde palauttaa HTML:n sijaan JSONia, DOMiin ei tarvitse koskea lainkaan — purat vain bodyn itse. Yksi ainoa callback riitti siihen, että Colly käsitteli JSON-API:n testissäni ilman että siitä tarvitsi parsia yhtään HTML:ää.
OnError(handler) on callback, jonka kaikki unohtavat siihen asti, että skräppäri kuolee kolmelta aamuyöstä. Se laukeaa, kun pyyntö epäonnistuu, ja antaa response-objektin mukaan, jotta voit lukea statuksen ja päättää mitä seuraavaksi tehdään. Crawleri, joka nielee virheet hiljaa, on huonompi kuin sellainen, joka kaatuu äänekkäästi; Colly ei tee kumpaakaan, ja sillä on enemmän väliä kuin äkkiä ajattelisi, kun ajo jätetään valvomatta.
Kahdella muulla ominaisuudella on operatiivisesti iso merkitys. MaxDepth rajaa crawlin, joten linkkejä seuraava collector pysähtyy kahden hypyn jälkeen eikä kierrä koko avointa verkkoa. Ja buildin lopputulos on yksi staattinen Go-binääri — käännä kerran, saat yhden tiedoston ilman runtime-riippuvuuksia, pudota se palvelimelle tai CI-jobiin ja aja. Jos olet joskus menettänyt iltapäivän Python-virtuaaliympäristölle uudella koneella, tämä tuntuu ominaisuudelta, ei alaviitteeltä.
Asennus — se Go-työkaluketju, josta kukaan ei puhu
Riippuvuustarina on lyhyt, mutta siinä on yksi oikea kompastuskivi, joten sanotaan se heti ennen kuin asennat mitään. Testikoneessani ei ollut Go’ta lainkaan, ja Colly on Go-kirjasto, joten ensimmäinen vaihe oli asentaa työkaluketju koneelle — asensin Go 1.26.5:n Homebrewn kautta. Jos tiimisi ei jo elä Go-maailmassa, juuri tässä on oikea kitka. Ei kirjastossa. Vaan siinä kieliympäristössä, jota tarvitaan ennen kuin ensimmäinenkään rivi kääntyy.
Kun Go oli paikallaan, Collyn hakeminen oli sujuvaa. go get github.com/gocolly/colly/v2 päätyi versioon v2.3.0 ilman mitään draamaa — ei selainta, ei headlessia, ei mitään muuta kuin lopuksi syntyvä käännetty binääri. Vertaa tätä Python-skräppäreihin, jotka asentavat parserin ja hajoavat ensimmäiseen hakuun puuttuvien lisäosien ketjussa, niin tämä oli miellyttävän tylsää. Tylsä on tässä kohteliaisuus.
Yksi täsmennyksen arvoinen huomio, suoraan sanottuna, koska se varmasti hämmentää, jos alat kaivaa asiaa. Go proxyn uusin moduuli on v2.3.0, julkaistu joulukuussa 2025. GitHubin uusin tagattu release on v2.2.0, maaliskuulta 2025. Eli testaamani koodi — v2.3.0 — on edellä sitä, mitä repositorion Releases-sivu näyttää. Se johtuu siitä, miten Go-moduulit ja GitHub-tagit ajautuvat ajan myötä erilleen, ei siitä että jokin olisi rikki. Älä vain ylläty, kun go get ja Releases-sivu näyttävät eri numeroita.
Käytännössä — mitä "nopea" tarkoittaa numeroina
Ajoin Collyn itse rakennetun testipalvelimen läpi Go’n httptest-työkalulla sekä kahdella julkisella demolla, jotta tulos on toistettavissa eikä vain minun kertomukseni varassa. Tässä mitä saatiin.

| Testi | Kohde | Tulos |
|---|---|---|
| Staattinen katalogi + sivutus | paikallinen testi | 12/12 tuotetta, recall 1.0 |
| Artikkelin poiminta | paikallinen testi | otsikko + 3/3 kappaletta |
| Dynaaminen JSON-API | paikallinen testi | 8/8 itemiä OnResponse-callbackilla, recall 1.0 |
| HTTP 500 -käsittely | paikallinen testi | ohjautui OnError:iin, status 500 |
Crawl-graph (MaxDepth 2) | paikallinen testi | 17 sivua |
| Books to Scrape | julkinen demo | 20 tuotetta |
| Dynaaminen sivu (ei JS:ää) | paikallinen testi | 0 korttia (odotettu) |
| Quotes JS (ei renderöintiä) | julkinen demo | 0 (odotettu) |

Kun tämän lukee ylhäältä alas, kokonaisuus pysyy kasassa. Staattinen poiminta oli siistiä — 12/12 tuotetta katalogista, kaikki kolme kappaletta artikkelista, ja kaikki OnHTML-valitsimien ohjaamana. JSON-API-testi ei koskaan avannut HTML-parseria: OnResponse antoi bodyn, purin sen itse, ja 8/8 itemiä tuli takaisin. 500-testi on se, johon nojaan eniten, koska juuri siinä kulkee raja yön yli ajettavan crawlerin ja sellaisen välillä, jota ei voi jättää yksin — Colly ohjasi virheen OnError:iin ja toi statuksen esiin siististi ilman kaatumista tai hiljaista hukkausta. Julkisessa Books to Scrape -demossa se nappasi 20 tuotetta ilman mitään erityiskäsittelyä.
Crawl-tulos on otsikkoa kiinnostavampi kohta, ja haluan muotoilla sen tarkasti. MaxDepth(2)-collector, joka seurasi linkkejä ja ratkaisi ne absoluuttisiksi URL-osoitteiksi, päätyi 17 sivuun testiverkossani. Siinä on vihdoin konkreettinen sivumäärä sille "nopea Go-crawler" -väitteelle, eikä vain fiilis. Mutta lue sanamuoto huolella — 17 sivua depth-2 crawlin aikana. Tuo syvyysluku on oman testiharnessini laskuri, joka kertoo miten ajon konfiguroin; en väitä, että Colly takaisi sisäisesti "täsmälleen syvyys 2, ei askeltakaan pidemmälle" sopimuksena. Rehellinen, todennettavissa oleva väite on tämä: syvyys rajattuna kahteen crawl läpäisi grafin ja saavutti 17 sivua.

Sitten tulee katto, eli se kohta, jossa "se on niin nopea" -kirjoitukset yleensä hiljenevät. Colly ei aja JavaScriptiä. Kohdistin sen JavaScriptillä renderöityyn testisivuun ja sain takaisin 0 korttia; kohdistin sen julkiseen Quotes to Scrape JS -sivuun ja sain taas 0. Se ei ole bugi eikä moite. Colly on HTTP-crawler — se lataa ja jäsentää HTML:n eikä koskaan käynnistä selainta asiakaspuolen skriptien ajamiseen. Kuten Scrapy ja muut HTTP-first-crawlerit, jos etsimäsi sisältö on olemassa vasta JavaScriptin ajon jälkeen, Colly palauttaa joka kerta tyhjän tuloksen, eikä mikään raakanopeus siirrä tätä rajaa. Yhdistä se renderöijään tai valitse työkalu, jossa sellainen tulee mukana.
Kerron yhtä suoraan myös siitä, mitä en testannut, jotta kukaan ei venytä tuloksiani pidemmälle kuin näyttö antaa myöten. En testannut async-collectorin, rate limitingin ja politeness-asetusten, proxy-vaihdon tai queue- ja storage-backendien toimintaa. Ne kyllä löytyvät Collysta. Testasin poiminnan ja crawlin ydintä, en skaalauksen taustaputkia. README mainostaa yli tuhannen requestin sekuntivauhtia yhdellä ytimellä, mutta se on projektin oma luku — minä mittasin sivumääriä ja recallia, en throughputia, joten kun sanon "nopea", tarkoitan sitä käännettyä Go-poimintapolkua, jonka oikeasti ajoin, en vertailua Scrapyyn, jota en ole tehnyt.
Plussat ja miinukset
Plussat:
- Täysi recall staattisessa poiminnassa — 12/12 katalogituotetta ja 3/3 artikkelikappaletta
OnHTML:n kautta. - Siisti JSON-käsittely
OnResponse-callbackilla, ilman DOM-parsintaa — 8/8 API-itemiä. - Oikea virheiden ohjaus — 500 meni
OnError:iin statuksen kera, eikä ohjelma kaatunut. - Syvyysrajoitettu crawlaus pääsi 17 sivulle yhdestä collectorista.
- Yksi staattinen Go-binääri, ei runtime-riippuvuuksia — erittäin hyvä käyttöönoton ja opsin kannalta.
- Salliva Apache-2.0-lisenssi.
Miinukset:
- Ei JavaScriptin ajoa — client-renderöity sisältö palautuu nollana, piste.
- Vaatii Go-työkaluketjun; tiimit, jotka eivät jo käytä Go’ta, maksavat tämän asennuskustannuksen ennen kuin ensimmäistäkään skräppäriä kirjoitetaan.
- Uusin moduuli (
v2.3.0) on edellä uusinta tagattua releasea (v2.2.0), mikä hämmentää helposti Releases-sivua lukevaa. - Output on omaa koodiasi — Colly antaa callbackit, ei valmista datasetiä tai feed-exporteria niin kuin Scrapy.
- Async-, rate limiting-, proxy- ja queue-backendit kyllä ovat olemassa, mutta niitä ei testattu tässä; "nopea" tarkoittaa mittaamaani poimintapolkua, ei suoraa throughput-vertailua.
Kenelle Colly sopii — ja kenen kannattaa ohittaa se

Colly sopii sinulle, jos kirjoitat jo Go’ta ja crawlaat HTML- tai JSON-pohjaisia sivustoja nopeasti. Jos sinun määritelmäsi hyvästä deploysta on yhden binäärin kopioiminen koneelle ja sen ajaminen — ei tulkkia, ei virtuaaliympäristöä, ei dependency-arpaa — työkalu on rakennettu juuri tähän elämäntapaan. Callback-malli maksaa itsensä takaisin heti, kun poiminta ei enää ole triviaalista: OnHTML rakenteeseen, OnResponse raakadataan, OnError virheisiin, jotka muuten jäisivät piiloon. Staattiselle tai API-pohjaiselle kohteelle, jota ajat aikataululla CI:stä, tämä on vahva ja vähädramaattinen valinta.
Ohita se, tai ainakin liitä siihen toinen työkalu, kun kohteesi nojaavat JavaScriptiin. Colly palautti 0 jokaiselta client-renderöidyltä sivulta, jonka laitoin sen eteen, ja se on suunnitteluratkaisu, ei asetus jonka voisi kytkeä päälle. Ohita se myös, jos tiimisi ei koske Go’hon etkä halua pystyttää työkaluketjua vain muutaman sivuston skräppäämistä varten — kielivalinta on oikea sitoumus, ja sen ylläpito on sinun vastuullasi. Ja jos haluat, että jäsennelty data annetaan sinulle valmiina eikä koodin itse parsittavaksi, Collyn callbackit siirtävät työn selvästi sinun puolellesi.
Vaihtoehdot — mihin hallittu AI-skräppäys-API sopii
Colly on ilmainen, avoimen lähdekoodin kirjasto, jonka käännät ja ajat itse. Omistat Go-koodin, callbackit, crawl-logiikan ja koneen, jolla se pyörii — ja vastineeksi et maksa mitään per request, sekä pidät koko toiminnan omissa käsissäsi. Go-tiimille tämä on perusteltu ratkaisu, ja yhden binäärin deploy on aidosti miellyttävä.
Kaksi kohtaa, joissa se pysähtyy, ovat juuri ne kohdat, joita kannattaa verrata johonkin muuhun. Ensinnäkin JavaScript — Colly ei renderöi sitä, joten kaikki client-puolen sisältö on poissa kuvasta, ellei mukaan liitetä selainta. Toiseksi rakenne — Colly antaa callbackit ja jättää siistin outputin muotoilun sinun koodillesi. Hallittu AI-skräppäys-API vastaa näihin kahteen eri tavalla. Thunderbit-palvelun dev-stack hoitaa JS-renderöinnin ja palauttaa jäsennellyn datan palvelinpuolella. POST /distill muuntaa sivun siistiksi, LLM-valmiiksi Markdowniksi, ja dynaaminen sisältö sekä anti-bot-suojaukset hoituvat puolestasi. POST /extract palauttaa jäsenneltyä JSONia määrittelemäsi JSON Scheman perusteella, ja renderMode-asetusta voi nostaa täyteen selainrenderöintiin, kun sivu sitä vaatii. Thunderbitilla on MCP-serveri AI-agenteille ja koodausavustajille — thunderbit_suggest_fields on ilmainen, joten voit katsoa mitä sivu tarjoaa ennen kuin sitoudut — sekä CLI, jonka voi ajaa komennolla npx @thunderbit/thunderbit-cli terminaalissa, CI:ssä ja cronissa.
Kokeile Thunderbitia verkkodatan poimintaan
Vaihtokauppa ei ole parempi vastaan huonompi. Kyse on siitä, missä työ tehdään. Collyn kanssa pidät renderöinnin (ei mitään), parsinnan ja ylläpidon omassa käännetyssä binäärissäsi, ilman käyttökutsukohtaista maksua, ja hoivaat sitä itse aina kun sivusto muuttuu. Hallitun API:n kanssa siirrät JS-renderöinnin, anti-botin ja jäsennellyn ulostulon pois omista käsistäsi, ja maksat jokaisesta kutsusta tämän etuoikeuden. Pienet, Go-native, HTML- tai JSON-pohjaiset kohteet, joita olet valmis omistamaan ja ylläpitämään? Collyn hallinta ja nopeus voittavat suoraan. JavaScript-raskaat sivut, tai haluat yksinkertaisesti vastaanottaa skeeman mukaista JSONia sen sijaan että kirjoittaisit vielä yhden callbackin? Silloin hallittu reitti on järkevämpi. Jos haluat laajemman kuvan, best web scraping tools ja best web scraping GitHub projects -koosteet näyttävät, mihin Collyn kaltainen kirjasto sijoittuu selainpohjaisten ja hallittujen vaihtoehtojen rinnalla.
Lopputulos
Kannattaako Collya käyttää? Kyllä — jos kirjoitat Go’ta ja crawlaat HTML- tai JSON-sisältöä nopeasti, se tekee juuri sen mitä "nopea crawler" -maine lupaa, ja nyt maineen takana on myös numeroita. Täysi recall staattisessa poiminnassa. Siisti JSON OnResponse-callbackilla. 500 ohjautui oikein OnError:iin eikä kadonnut jonnekin. Syvyys 2:n crawl pääsi 17 sivuun. Kaikki käännettynä yhdeksi staattiseksi binääriksi ilman runtime-riippuvuuksia, mikä on koko tämän kategorian ystävällisin deploy-tarina.
Mutta mitoita väitteet rehellisesti. Se ei renderöi JavaScriptiä — jokainen client-puolen sivu testissäni palautti 0, ja se on pysyvää, ei mikään unohtamasi asetus. Se vaatii Go-työkaluketjun, joten ei-Go-tiimit maksavat asennusveron etukäteen. Asennettava moduuli (v2.3.0) on uudempi kuin uusin tagattu release (v2.2.0), joten älä hätäänny, kun sivut näyttävät eri numeroita. Ja "nopea" tässä tarkoittaa mittaamaani poimintapolkua, ei throughput-benchmarkia, jota en ole ajanut. Näiden rajojen sisällä Colly on nopea, luotettava ja aidosti käyttöönotettava Go-crawler — ja se lunastaa maineensa heti, kun et enää yritä pakottaa sitä ajamaan JavaScriptiä.
Kokeile Thunderbitia verkkodatan poimintaan Get Started Free
Usein kysytyt kysymykset
Onko Colly oikeasti nopea, ja onko sille numeroita? Se on nopea siinä merkityksessä, joka on tärkeä mitatulle ydinkäytölle: käännetty Go, täysi recall staattisessa poiminnassa (12/12 katalogituotetta), siisti JSON-käsittely ja syvyys 2:n crawl, joka päätyi 17 sivuun — kaikki yhdestä staattisesta binääristä. En kuitenkaan ajanut throughput-vertailua Scrapyta vastaan, joten tulkitse "nopea" mitattuna poimintakäyttäytymisenä, älä suorana speed score -lukuna.
Voiko Colly skräpätä JavaScriptillä renderöityjä sivuja? Ei. Colly on HTTP-crawler — se lataa ja jäsentää HTML:n, mutta ei koskaan käynnistä selainta. JavaScriptillä renderöity testi palautti 0 korttia, ja myös julkinen Quotes JS -sivu palautti 0. Asiakaspuolen sisällölle tarvitset Collyn rinnalle renderöijän tai työkalun, jossa selainrenderöinti on valmiiksi mukana.
Pitääkö minun osata Go’ta käyttääkseni Collya?
Kyllä. Colly on Go-kirjasto, ei erillinen CLI — tuot sen projektiin, rekisteröit callbackit (OnHTML, OnResponse, OnError) ja käännät. Testikoneessani ei ollut Go’ta, joten asennus alkoi työkaluketjun asennuksella (1.26.5). Jos tiimisi ei jo työskentele Go-ympäristössä, se ympäristö on oikea käyttöönoton hinta.
Miksi asentamani versio ei vastaa Collyn uusinta GitHub-releasia?
Koska Go-moduuli ja GitHubin release-tag ovat ajautuneet erilleen. Go proxyn uusin moduuli on v2.3.0 (joulukuu 2025), kun taas GitHubin uusin tagattu release on v2.2.0 (maaliskuu 2025). Testasin v2.3.0:aa. Kyse on moduulien ja tagien eroista, ei rikkinäisestä asennuksesta.
Onko Colly ilmainen kaupalliseen käyttöön? Se on Apache-2.0, eli salliva ja kaupalliseen käyttöön hyvin sopiva lisenssi. Tarkista aina ajantasainen lisenssi repositoriosta ennen kuin rakennat sen varaan.


