Coba cari kata "Colly", dan kata sifat yang paling sering muncul selalu sama: fast. Fast Go crawler, cepat karena dikompilasi, cepat karena tidak ada browser yang ikut campur. Hampir tidak ada yang benar-benar menyertakannya dengan angka.
Jadi, saya berhenti menerima klaim itu begitu saja. Saya menyiapkan sebuah situs uji kecil, menjalankan Colly di atasnya, lalu melihat apa yang benar-benar dilakukan library ini — apakah hasil ekstraksi di halaman nyata akurat, bagaimana ia menangani request yang gagal, dan seberapa jauh crawl dengan batas kedalaman yang ditentukan bisa berjalan. Ringkasnya dulu sebelum masuk ke angka: ekstraksi statis menghasilkan recall penuh, error 500 masuk ke tempat yang tepat, dan crawl dengan batas depth berhasil mencapai 17 halaman dari satu binary statis tanpa browser. Library ini juga mengembalikan angka nol yang bersih untuk semua konten yang dirender JavaScript — dan itu justru bagian yang sering diabaikan oleh narasi "fast".
Apa sebenarnya Colly itu, dan apa yang bukan

Colly menyebut dirinya sebagai "elegant scraper and crawler framework for Golang", dan satu kalimat itu punya bobot lebih besar dari kelihatannya. Ini adalah library Go — sekitar ~25,4k bintang per 2026-07-09 di gocolly/colly, dengan lisensi Apache-2.0. Ini bukan alat command-line yang tinggal diunduh lalu diarahkan ke sebuah URL. Anda menulis kode Go, mengimpor package-nya, memasang beberapa callback, lalu mengompilasinya menjadi satu executable.
Model mentalnya berbasis event, dan ini sering membingungkan orang yang terbiasa dengan pola request-lalu-parse. Anda tidak mengiterasi response lalu mengambil field satu per satu. Anda menempelkan handler ke sebuah Collector, lalu membiarkan library memicunya saat menelusuri halaman. OnHTML menjalankan kode ekstraksi Anda setiap kali selector CSS yang cocok ditemukan. OnResponse menyerahkan body mentah response, yang penting ketika payload-nya JSON, bukan HTML. OnError menangkap request yang gagal. Crawl bekerja dengan pola yang sama: di dalam handler untuk link, Anda memanggil Visit() pada URL yang ditemukan, Colly memasukkannya ke antrean, dan MaxDepth menentukan seberapa jauh penelusuran boleh berlangsung. Callback, antrean visit, batas kedalaman, static compiled. Tanpa interpreter, tanpa runtime, tanpa headless Chrome yang diam-diam memakan memori.
Model callback, dan kenapa itu mengubah rasa kerja ekstraksi
Callback adalah karakter utama dari tool ini, jadi layak dijelaskan pelan-pelan. Tiga di antaranya memegang semua pengujian yang saya jalankan.
OnHTML(selector, handler) adalah yang paling sering dipakai. Daftarkan pada .product atau article p, lalu Colly memanggil handler Anda satu kali untuk setiap elemen yang cocok saat DOM diparse. Di sinilah ekstraksi terstruktur hidup, dan pendekatannya enak dibaca — Anda mendeskripsikan apa yang diinginkan, bukan loop untuk mengambilnya.
OnResponse(handler) berada satu lapis di bawah dan memberi Anda bytes mentah dari jaringan. Saat target mengembalikan JSON, bukan markup, Anda tidak menyentuh DOM sama sekali — Anda melakukan unmarshal pada body sendiri. Callback tunggal inilah yang membuat Colly bisa menangani API JSON dalam pengujian saya tanpa harus memproses selembar HTML pun.
OnError(handler) adalah callback yang sering dilupakan sampai scraper mati jam 3 pagi. Ia terpanggil saat request gagal dan menyerahkan response kepada Anda, sehingga status code bisa dibaca dan Anda bisa menentukan langkah berikutnya. Crawler yang diam-diam menelan kegagalan justru lebih buruk daripada yang gagal dengan suara keras; Colly tidak melakukan keduanya, dan itu lebih penting dari yang terdengar ketika job berjalan tanpa pengawasan.
Ada dua fitur lagi yang berada di atas callback tersebut dan penting secara operasional. MaxDepth membatasi crawl, jadi collector yang mengikuti link berhenti dua langkah keluar alih-alih menjelajahi web secara bebas. Dan hasil build-nya adalah satu binary statis Go — kompilasi sekali, dapat satu file tanpa dependensi runtime, lalu tinggal taruh di server atau masuk ke job CI. Kalau Anda pernah kehilangan separuh hari hanya karena virtualenv Python di mesin baru bermasalah, model deploy seperti ini terasa seperti fitur, bukan catatan kecil.
Setup — toolchain Go yang jarang disebut orang
Cerita dependensinya memang singkat, tapi ada satu kendala nyata, jadi saya jelaskan dulu sebelum Anda memasang apa pun. Mesin yang saya pakai untuk pengujian sama sekali belum punya Go, dan Colly adalah library Go, jadi langkah nolnya adalah memasang toolchain ke mesin itu — saya menginstal Go 1.26.5 lewat Homebrew. Kalau tim Anda belum hidup di ekosistem Go, itulah friksi yang sesungguhnya. Bukan library-nya. Tapi lingkungan bahasa yang dibutuhkan sebelum satu baris pun bisa dikompilasi.
Setelah Go terpasang, mengambil Colly berjalan mulus. go get github.com/gocolly/colly/v2 menghasilkan v2.3.0 tanpa drama — tanpa browser, tanpa headless apa pun, tanpa hal lain selain binary hasil kompilasi di akhir. Bandingkan dengan scraper Python yang memasang parser lalu tumbang saat fetch pertama karena rantai extras yang hilang, dan pengalaman ini terasa menyenangkan justru karena membosankan. Dalam konteks ini, membosankan adalah pujian.
Satu catatan presisi, saya sampaikan apa adanya karena ini pasti akan membingungkan kalau Anda mengecek lebih jauh. Modul terbaru di Go proxy adalah v2.3.0, dirilis Desember 2025. Sementara release bertag terbaru di GitHub adalah v2.2.0, dari Maret 2025. Jadi kode yang saya uji — v2.3.0 — lebih baru daripada yang terlihat di halaman Releases repository. Itu hanya keanehan kecil karena modul Go dan tag GitHub kadang tidak sinkron seiring waktu, bukan tanda ada yang rusak. Jadi jangan heran saat go get dan halaman Releases memberi nomor yang berbeda.
Uji langsung — angka di balik kata "fast"
Saya menjalankan Colly pada server fixture mandiri berbasis httptest milik Go, ditambah dua situs demo publik, supaya perilakunya bisa direplikasi dan bukan sekadar cerita saya. Inilah hasilnya.

| Pengujian | Target | Hasil |
|---|---|---|
| Katalog statis + pagination | fixture lokal | 12/12 produk, recall 1.0 |
| Ekstraksi artikel | fixture lokal | judul + 3/3 paragraf |
| API JSON dinamis | fixture lokal | 8/8 item via OnResponse, recall 1.0 |
| Penanganan HTTP 500 | fixture lokal | diarahkan ke OnError, status 500 |
Graph crawl (MaxDepth 2) | fixture lokal | 17 halaman |
| Books to Scrape | demo publik | 20 produk |
| Halaman dinamis (tanpa JS) | fixture lokal | 0 kartu (sesuai harapan) |
| Quotes JS (tanpa render) | demo publik | 0 (sesuai harapan) |

Kalau dibaca dari atas ke bawah, polanya jelas. Ekstraksi statis bersih — 12 dari 12 produk dari katalog, ketiga paragraf dari artikel, semuanya digerakkan oleh selector OnHTML. Pengujian API JSON tidak pernah membuka parser HTML: OnResponse menyerahkan body, saya melakukan unmarshal, lalu 8 dari 8 item kembali. Tes 500 adalah yang paling saya andalkan, karena di situlah batas antara crawler yang bisa dibiarkan berjalan semalaman dan yang tidak — Colly mengirim kegagalan ke OnError dan menampilkan status dengan bersih, tanpa crash dan tanpa kegagalan yang diam-diam hilang. Pada demo publik Books to Scrape, Colly menarik 20 produk tanpa penanganan khusus.
Hasil crawl adalah bagian utamanya, dan saya ingin merumuskannya dengan hati-hati. Collector dengan MaxDepth(2), yang mengikuti link dan mengubahnya menjadi absolute URL, berhasil mencapai 17 halaman di graph fixture saya. Itulah kalimat "fast Go crawler" yang akhirnya punya angka halaman, bukan sekadar kesan. Tapi perhatikan redaksinya — 17 halaman dalam crawl depth-2. Angka depth di sini adalah counter dari harness pengujian saya sendiri, yang menjelaskan cara saya mengonfigurasi run tersebut; saya tidak sedang mengklaim bahwa Colly secara internal menjamin "tepat depth 2, tidak satu link pun lewat" sebagai kontrak. Pernyataan yang jujur dan bisa diverifikasi adalah ini: dengan depth dibatasi ke 2, crawl menelusuri graph dan mencapai 17 halaman.

Sekarang batasnya, yaitu bagian yang biasanya membuat postingan "begitu cepat" menjadi hening. Colly tidak menjalankan JavaScript. Saya arahkan ke fixture yang dirender JavaScript dan hasilnya 0 kartu; saya arahkan ke halaman publik Quotes to Scrape JS dan hasilnya 0 lagi. Itu bukan bug dan bukan pula kekurangan. Colly adalah HTTP crawler — ia mengunduh dan memproses HTML, dan tidak pernah menyalakan browser untuk menjalankan script sisi klien. Seperti Scrapy dan crawler HTTP-first lainnya, jika konten yang Anda cari hanya muncul setelah JavaScript berjalan, Colly akan memberi Anda hasil kosong setiap saat, dan seberapa cepat pun ia bekerja tidak akan mengubah fakta itu. Pasangkan dengan renderer, atau pilih tool yang memang sudah menyertakannya.
Saya juga akan jujur soal apa yang tidak saya uji, supaya tidak ada yang menarik kesimpulan lebih jauh dari bukti yang ada. Saya tidak menguji async collector, konfigurasi rate limiting dan politeness, rotasi proxy, atau backend queue dan storage. Fitur-fitur itu memang ada di Colly. Yang saya uji adalah inti ekstraksi dan crawl, bukan infrastruktur scale-out. README memang mengklaim throughput di atas seribu request per detik pada single core, tetapi itu angka dari proyeknya sendiri — saya mengukur jumlah halaman dan recall, bukan throughput, jadi ketika saya menyebut "fast", maksudnya adalah jalur ekstraksi Go terkompilasi yang benar-benar saya ukur, bukan benchmark head-to-head melawan Scrapy yang belum saya jalankan.
Kelebihan dan kekurangan
Kelebihan:
- Recall penuh pada ekstraksi statis — 12/12 produk katalog dan 3/3 paragraf artikel lewat
OnHTML. - Penanganan JSON rapi lewat
OnResponse, tanpa perlu parsing DOM — 8/8 item API. - Routing kegagalan tepat — error 500 masuk ke
OnErrordengan status terlihat, tanpa crash. - Crawl dengan batas depth berhasil mencapai 17 halaman dari satu collector.
- Satu binary Go statis, tanpa dependensi runtime — profil deploy dan operasional yang sangat enak.
- Lisensi Apache-2.0 yang permisif.
Kekurangan:
- Tidak menjalankan JavaScript — konten yang dirender di sisi klien akan tetap 0, titik.
- Membutuhkan toolchain Go; tim yang belum memakai Go harus membayar biaya setup itu sebelum menulis scraper apa pun.
- Modul terbaru (
v2.3.0) lebih baru daripada release bertag terbaru (v2.2.0), yang bisa membingungkan siapa pun yang melihat halaman Releases. - Output sepenuhnya kode Anda sendiri — Colly memberi callback, bukan dataset atau feed exporter bawaan seperti Scrapy.
- Backend async, rate limiting, proxy, dan queue memang ada tetapi tidak diuji di sini; "fast" yang saya maksud adalah jalur ekstraksi yang saya ukur, bukan angka throughput perbandingan.
Cocok untuk siapa — dan siapa yang sebaiknya lewat

Colly cocok jika Anda sudah menulis Go dan Anda melakukan crawl pada situs berbasis HTML atau JSON dengan kebutuhan kecepatan tinggi. Kalau definisi deploy yang bersih bagi Anda adalah menyalin satu binary ke server lalu menjalankannya — tanpa interpreter, tanpa virtualenv, tanpa drama dependensi — tool ini memang dibuat untuk kebiasaan seperti itu. Model callback-nya sangat terasa manfaatnya saat ekstraksi mulai tidak sederhana: OnHTML untuk struktur, OnResponse untuk payload mentah, OnError untuk kegagalan yang kalau tidak akan luput dari pandangan. Untuk target statis atau API yang Anda crawl terjadwal dari CI, ini pilihan yang kuat dan minim drama.
Lewatkan, atau setidaknya tambahkan tool kedua, kalau target Anda sangat bergantung pada JavaScript. Colly mengembalikan 0 pada setiap halaman client-rendered yang saya berikan, dan itu memang desainnya, bukan opsi yang bisa Anda ubah. Lewatkan juga jika tim Anda tidak menyentuh Go dan Anda tidak ingin memasang toolchain hanya untuk mengikis data dari beberapa situs — komitmen terhadap bahasa ini nyata dan Anda yang harus memeliharanya. Dan jika Anda ingin data terstruktur langsung dikirim ke Anda, bukan diurai oleh kode buatan sendiri, callback Colly membuat pekerjaan itu sepenuhnya jatuh di sisi Anda.
Alternatif — di mana API scraping AI yang dikelola masuk
Colly adalah library open-source gratis yang Anda kompilasi dan jalankan sendiri. Anda memegang kode Go, callback, logika crawl, dan mesin tempat semuanya berjalan — dan sebagai gantinya Anda tidak membayar per request serta tetap menyimpan seluruh operasi di lingkungan sendiri. Untuk tim yang sudah memakai Go, ini jawaban yang masuk akal, dan deploy satu binary memang menyenangkan.
Dua titik di mana ia berhenti adalah dua titik yang paling pantas dibandingkan dengan solusi lain. Pertama, JavaScript — Colly tidak merendernya, jadi semua yang hanya muncul di sisi klien berada di luar jangkauan kecuali Anda menambahkan browser. Kedua, struktur — Colly memberi callback dan membiarkan Anda merapikan output lewat kode Anda sendiri. API scraping AI yang dikelola menjawab kedua hal itu dengan cara berbeda. Stack developer Thunderbit menangani rendering JS dan mengembalikan data terstruktur di sisi server. POST /distill mengubah halaman menjadi Markdown yang rapi dan siap untuk LLM, dengan konten dinamis dan anti-bot yang ditangani untuk Anda. POST /extract mengembalikan JSON terstruktur berdasarkan JSON Schema yang Anda definisikan, dengan renderMode yang bisa dinaikkan hingga full browser rendering ketika halaman membutuhkannya. Ada server Thunderbit MCP untuk AI agent dan coding assistant — thunderbit_suggest_fields gratis, jadi Anda bisa melihat apa yang diekspos sebuah halaman sebelum benar-benar berkomitmen — dan ada CLI yang bisa dijalankan lewat npx @thunderbit/thunderbit-cli untuk terminal, CI, dan cron.
Coba Thunderbit untuk Ekstraksi Data Web
Trade-off-nya bukan soal lebih baik atau lebih buruk. Yang beda adalah di mana pekerjaannya berada. Dengan Colly, rendering (yang memang tidak ada), parsing, dan maintenance tetap di binary terkompilasi Anda sendiri, tanpa biaya per pemanggilan, dan Anda yang harus merawatnya ketika struktur situs berubah. Dengan API terkelola, Anda menyerahkan rendering JS, anti-bot, dan output terstruktur, lalu membayar per panggilan untuk kemudahannya. Target kecil, native Go, berbasis HTML atau JSON, dan Anda senang memilikinya serta memeliharanya sendiri? Kontrol dan kecepatan Colly menang telak. Halaman yang berat JavaScript, atau Anda memang lebih suka menerima JSON berbentuk skema daripada menulis satu callback lagi? Itu argumen untuk jalur terkelola. Kalau Anda ingin melihat lanskap yang lebih luas, rangkuman best web scraping tools dan best web scraping GitHub projects menunjukkan posisi library seperti Colly di samping opsi berbasis browser dan yang dikelola.
Putusan akhir
Apakah Anda sebaiknya memakai Colly? Ya — jika Anda menulis Go dan melakukan crawl HTML atau JSON dengan cepat, tool ini memang memenuhi reputasi "fast crawler"-nya, dan sekarang ada angka yang mendukung reputasi itu. Recall penuh pada ekstraksi statis. JSON bersih lewat OnResponse. Error 500 diarahkan dengan tepat ke OnError, bukan menghilang. Crawl depth-2 yang mencapai 17 halaman. Semua itu dikompilasi menjadi satu binary statis tanpa dependensi runtime, yang merupakan salah satu cerita deploy paling ramah dalam kategori ini.
Tapi ukur klaimnya dengan jujur. Colly tidak merender JavaScript — semua halaman client-side dalam pengujian saya menghasilkan 0, dan itu permanen, bukan pengaturan yang Anda lewatkan. Ia membutuhkan toolchain Go, jadi tim non-Go membayar biaya setup di depan. Modul yang Anda instal (v2.3.0) lebih maju daripada release bertag terbaru (v2.2.0), jadi jangan panik kalau halaman-halamannya berbeda pendapat. Dan "fast" di sini berarti jalur ekstraksi yang saya ukur, bukan benchmark throughput yang belum saya jalankan. Dalam batas-batas itu, Colly adalah crawler Go yang cepat, andal, dan benar-benar siap deploy — dan reputasinya memang layak, begitu Anda berhenti memaksanya menjalankan JavaScript.
Coba Thunderbit untuk Ekstraksi Data Web Get Started Free
FAQ
Apakah Colly benar-benar cepat, dan ada angkanya? Cepat dalam pengertian yang relevan untuk jalur inti yang saya ukur: Go terkompilasi, recall penuh pada ekstraksi statis (12/12 produk katalog), penanganan JSON yang bersih, dan crawl depth-2 yang mencapai 17 halaman — semuanya dari satu binary statis. Yang tidak saya jalankan adalah benchmark throughput melawan Scrapy, jadi anggap "fast" sebagai perilaku ekstraksi yang terukur, bukan skor kecepatan head-to-head.
Bisakah Colly meng-scrape halaman yang dirender JavaScript? Tidak. Colly adalah HTTP crawler — ia mengunduh dan memproses HTML tetapi tidak pernah menjalankan browser. Fixture yang dirender JavaScript menghasilkan 0 kartu, dan halaman Quotes JS publik juga menghasilkan 0. Untuk konten sisi klien, Anda perlu memasangkan Colly dengan renderer atau menggunakan tool yang memang sudah menyertakan browser rendering.
Apakah saya harus tahu Go untuk memakai Colly?
Ya. Colly adalah library Go, bukan CLI mandiri — Anda mengimpornya, mendaftarkan callback (OnHTML, OnResponse, OnError), lalu mengompilasi. Mesin yang saya uji bahkan belum punya Go, jadi setup dimulai dengan memasang toolchain (1.26.5). Jika tim Anda belum bekerja di Go, lingkungan itu adalah biaya setup yang sesungguhnya.
Kenapa versi yang saya instal tidak sama dengan release GitHub terbaru Colly?
Karena module Go dan tag release GitHub sudah tidak sinkron. Modul terbaru di Go proxy adalah v2.3.0 (Desember 2025), sedangkan release bertag terbaru di GitHub adalah v2.2.0 (Maret 2025). Saya menguji v2.3.0. Ini hanya keanehan antara module dan tag, bukan instalasi yang rusak.
Apakah Colly gratis untuk penggunaan komersial? Ya, lisensinya Apache-2.0, yang permisif dan ramah untuk penggunaan komersial. Seperti biasa, pastikan lisensi terbaru di repo sebelum Anda membangunnya ke dalam produk.


