“Colly” diye arattığında karşına çıkan ilk sıfat çoğunlukla aynı olur: hızlı. Hızlı Go crawler, derlendiği için hızlı, browser olmadığı için hızlı. Ama neredeyse kimse bunun yanına bir sayı koymaz.
Ben de artık kulağa güvenmeyi bıraktım. Küçük bir test sitesi kurdum, Colly’yi onun üzerinde derleyip çalıştırdım ve kütüphanenin gerçekte ne yaptığını izledim — gerçek sayfalarda ne kadar doğru sonuç verdiğini, başarısız bir isteği nasıl yönettiğini, derinlik sınırı olan bir crawl’un ne kadar uzağa gittiğini. Sonucu en baştan söyleyeyim: statik içerik çıkarımında tam isabet aldı, 500 hatasını tam olması gerektiği yerde yakaladı ve derinliği sınırlandırılmış crawl, browser olmadan tek bir statik binary üzerinden 17 sayfaya ulaştı. Üstelik JavaScript ile render edilen her şeyde tertemiz bir 0 döndürdü — yani “hızlı” övgüsünde genelde atlanan kısımda.
Colly gerçekte nedir, ne değildir?

Colly, kendisini “Golang için zarif bir scraper ve crawler framework’ü” diye tanımlıyor; bu tek cümle sandığından daha fazlasını anlatıyor. Bu bir Go kütüphanesi — gocolly/colly için 09.07.2026 itibarıyla yaklaşık 25,4k yıldız var ve Apache-2.0 lisansıyla geliyor. İndirip bir URL’ye doğrulttuğun bir komut satırı aracı değil. Go kodu yazarsın, paketi içe aktarırsın, birkaç callback bağlarsın ve sonucu tek bir executable olarak derlersin.
Zihinsel model olay odaklıdır ve bu, istek alıp ayrıştırmaya alışmış insanları şaşırtır. Bir response’un içinde satır satır dolaşıp alan çekmezsin. Bir Collector üzerine handler’lar eklersin; kütüphane sayfaları gezerken bunları tetikler. OnHTML, eşleşen her CSS selector göründüğünde çıkarım kodunu çalıştırır. OnResponse, sana ham response gövdesini verir; yük HTML değil JSON olduğunda bu kritik hale gelir. OnError, bozulan istekleri yakalar. Crawl mantığı da aynı şekilde işler: link handler’ının içinde bulduğun URL’ler için Visit() çağırırsın, Colly bunları kuyruğa alır ve MaxDepth ne kadar uzağa gidileceğine karar verir. Callback’ler, ziyaret kuyruğu, derinlik limiti, derlenmiş statik yapı. Interpreter yok, runtime yok, memory’de bekleyen headless Chrome yok.
Callback modeli ve çıkarım hissini neden değiştirdiği
Bu aracın karakteri tamamen callback’lerde yatıyor; o yüzden burada biraz yavaşlamakta fayda var. Yaptığım testlerin hepsini üç callback taşıdı.
OnHTML(selector, handler) en çok kullanacağın olan. Bunu .product ya da article p gibi seçicilere bağlarsın; Colly DOM’u işlerken eşleşen her eleman için handler’ını çağırır. Yapısal veri çıkarımı tam burada yaşar ve kullanım biçimi oldukça temizdir — ne istediğini tarif edersin, veriyi çeken döngüyü değil.
OnResponse(handler) bir seviye aşağıda durur ve sana ağdan gelen ham baytları verir. Hedef HTML yerine JSON döndürüyorsa DOM’a hiç dokunmazsın — gövdeyi kendin ayrıştırırsın. Colly’nin benim testimde bir HTML satırı ayrıştırmadan bir JSON API’yi sorunsuz işlemesini sağlayan şey bu tek callback’ti.
OnError(handler) ise herkesin sabah 3’te bir scraper çöktüğünde hatırladığı callback’tir. İstek başarısız olduğunda tetiklenir ve sana response’u iletir; böylece durum kodunu okuyup sonraki adımı belirlersin. Hataları sessizce yutan bir crawler, yüksek sesle çöken birinden daha kötüdür; Colly ikisini de yapmıyor ve unattended çalışan işler için bunun önemi sanıldığından daha büyük.
Bu callback’lerin üstünde operasyonel açıdan önemli iki özellik daha var. MaxDepth, crawl’u sınırlar; böylece link takip eden bir collector açık web’de dolaşmak yerine iki adımda durur. Ve build çıktısı tek bir statik Go binary’sidir — bir kez derlersin, runtime bağımlılığı olmayan tek bir dosya elde edersin, sunucuya ya da CI job’una koyar ve çalıştırırsın. Yeni bir makinede Python virtualenv yüzünden bir öğleden sonranın heba olduğunu yaşadıysan, bu dağıtım profili bir dipnot değil, doğrudan avantaj gibi gelir.
Kurulum — kimsenin laf etmediği Go toolchain kısmı
Bağımlılık hikâyesi kısa, ama gerçek bir zorluğu var; o yüzden bir şey kurmadan önce açıkça söyleyeyim. Test yaptığım makinede Go yüklü değildi ve Colly bir Go kütüphanesi olduğu için ilk adım makineye toolchain kurmaktı — ben Go 1.26.5’i Homebrew ile kurdum. Ekibiniz zaten Go ile yaşamıyorsa, asıl sürtünme budur. Kütüphane değil. Tek bir satır bile derlenmeden önce ihtiyaç duyduğu dil ortamı.
Go hazır olduktan sonra Colly’yi çekmek çok sorunsuzdu. go get github.com/gocolly/colly/v2, v2.3.0’a problemsiz çözüldü — browser yok, headless bir şey yok, sonunda derlenmiş binary dışında hiçbir ekstra yok. Bunu bir parser kurup ilk fetch’te eksik paketler yüzünden dağılan Python scraper’larıyla karşılaştırınca oldukça sakin bir deneyimdi. Burada sakinlik övgüdür.
Bir hassasiyet notu da ekleyeyim; bunu açık söylemek lazım çünkü derine inersen seni kesinlikle karıştıracaktır. Go proxy’deki en güncel module v2.3.0, yayın tarihi Aralık 2025. GitHub’daki en yeni etiketlenmiş release ise v2.2.0, Mart 2025 tarihli. Yani benim test ettiğim kod — v2.3.0 — repository’nin Releases sayfasında görünen sürümün ilerisinde. Bu, Go modules ile GitHub tag’lerinin zaman içinde birbirinden kopmasının bir sonucu; yanlış giden bir şeyin işareti değil. Sadece go get ile Releases sayfası farklı numaralar gösterince irkilmeyin.
Uygulamalı test — “hızlı” lafının arkasındaki sayılar
Colly’yi, Go’nun httptest altyapısıyla kurduğum bağımsız bir test sunucusuna ve iki halka açık demo siteye karşı çalıştırdım; yani davranış, anlattığım bir hikâye değil, yeniden üretilebilir bir sonuç olsun istedim. Gelen sonuçlar şöyle.

| Test | Hedef | Sonuç |
|---|---|---|
| Statik katalog + sayfalama | yerel test ortamı | 12/12 ürün, geri çağırma 1.0 |
| Makale çıkarımı | yerel test ortamı | başlık + 3/3 paragraf |
| Dinamik JSON API | yerel test ortamı | OnResponse ile 8/8 öğe, geri çağırma 1.0 |
| HTTP 500 işleme | yerel test ortamı | OnError’a yönlendirildi, durum 500 |
Crawl grafiği (MaxDepth 2) | yerel test ortamı | 17 sayfa |
| Books to Scrape | halka açık demo | 20 ürün |
| Dinamik sayfa (JS yok) | yerel test ortamı | 0 kart (beklenen) |
| Quotes JS (render yok) | halka açık demo | 0 (beklenen) |

Üstten alta okuyunca tablo netleşiyor. Statik çıkarım pürüzsüzdü — katalogdan 12’nin 12’si, makaleden 3’ün 3 paragrafı, hepsi OnHTML selector’larıyla çekildi. JSON API testinde HTML parser hiç devreye girmedi: OnResponse gövdeyi teslim etti, ben deserialize ettim, 8’in 8’i geri geldi. En çok önemsediğim test ise 500 olanı, çünkü crawler’ı gece boyunca açık bırakıp bırakamayacağını belirleyen çizgi tam burası. Colly hatayı OnError’a gönderdi ve durum bilgisini düzgün biçimde gösterdi; çökme yok, sessiz kayıp yok. Halka açık Books to Scrape demosunda da özel bir ayar gerekmeden 20 ürün çekti.
Crawl sonucu asıl başlık ve bunu dikkatli ifade etmek istiyorum. MaxDepth(2) ile çalışan, linkleri takip edip onları mutlak URL’lere çözen bir collector, benim fixture grafiğim boyunca 17 sayfaya ulaştı. İşte “hızlı Go crawler” ifadesi sonunda bir his değil, gerçek bir sayfa sayısına bağlanmış oluyor. Ama ifadeyi doğru oku — 17 sayfa derinliği 2 olan bir crawl sırasında. Buradaki derinlik sayısı, test harness’imin kendi sayacı; koşuyu nasıl yapılandırdığımı anlatıyor. Colly’nin içten içe “tam olarak depth 2, bir link bile ileri değil” diye bir garanti verdiğini iddia etmiyorum. Doğrulanabilir dürüst ifade şu: derinlik 2 ile sınırlandığında crawl grafiği dolaştı ve 17 sayfaya ulaştı.

Şimdi de sınır kısmı; “çok hızlı” yazılarının genelde sessizleştiği yer burası. Colly JavaScript çalıştırmaz. Onu JavaScript ile render edilen bir test ortamına yönelttim ve 0 kart aldım; halka açık Quotes to Scrape JS sayfasına yönelttim ve yine 0 döndü. Bu bir bug değil, bir eksiklik de değil. Colly bir HTTP crawler’dır — HTML indirir ve ayrıştırır, ama client-side script’leri çalıştırmak için browser açmaz. Scrapy ve diğer HTTP-first crawler’lar gibi, eğer aradığın içerik yalnızca JavaScript çalıştıktan sonra ortaya çıkıyorsa Colly her seferinde sana boş sonuç verir; ham hız bu çizgiyi değiştirmez. Ya bir renderer ile eşleştir ya da render’ı yerleşik gelen bir araç seç.
Aynı şekilde, test etmediğim şeyleri de net söyleyeyim ki kimse sonuçlarımı kanıtın ötesine taşımaya kalkmasın. Async collector’ı, rate limiting ve politeness ayarlarını, proxy rotasyonunu ya da queue ve storage backend’lerini zorlamadım. Bunlar Colly’de mevcut. Ben çıkarım ve crawl çekirdeğini test ettim, ölçekleme altyapısını değil. README, tek çekirdekte saniyede binin üzerinde istek hızından bahsediyor; fakat bu projenin kendi verisi. Ben sayfa sayısı ve recall ölçtüm, throughput değil. Bu yüzden “hızlı” derken Scrapy’ye karşı koştuğum bir benchmark’ı değil, gerçekten ölçtüğüm derlenmiş Go çıkarım yolunu kastediyorum.
Artılar ve eksiler
Artılar:
- Statik içerik çıkarımında tam isabet —
OnHTMLüzerinden 12/12 katalog ürünü ve 3/3 makale paragrafı. OnResponseile temiz JSON işleme, DOM ayrıştırmaya gerek yok — 8/8 API öğesi.- Hataları doğru yönlendirme — 500, çökme olmadan durum bilgisiyle
OnError’a düştü. - Tek bir collector ile derinlik sınırlı crawl, 17 sayfaya ulaştı.
- Tek statik Go binary’si, sıfır runtime bağımlılığı — dağıtım ve operasyon açısından mükemmel.
- Geniş izinli Apache-2.0 lisansı.
Eksiler:
- JavaScript çalıştırmaz — client-render edilen içerik açıkça 0 döner.
- Go toolchain gerektirir; zaten Go kullanmayan ekipler, scraper yazmaya başlamadan önce bu kurulum maliyetini öder.
- Kurulan en güncel module (
v2.3.0), en yeni etiketlenmiş release’in (v2.2.0) ilerisinde; Releases sayfasını okuyanları şaşırtabilir. - Çıktı tamamen senin kodundur — Colly, Scrapy’deki gibi hazır bir dataset veya feed exporter sunmaz.
- Async, rate limiting, proxy ve queue backend’leri mevcut olsa da burada test edilmedi; “hızlı” dediğim şey ölçtüğüm çıkarım yolu, birebir throughput karşılaştırması değil.
Colly kimler için uygun, kimler uzak dursun?

Colly, zaten Go yazıyorsan ve HTML ya da JSON tabanlı siteleri hızla tarıyorsan tam sana göredir. Temiz deploy tanımın tek bir binary’yi sunucuya kopyalayıp çalıştırmaksa — interpreter yok, virtualenv yok, dependency piyangosu yok — bu araç tam da bu yaklaşım için tasarlanmış. Extraction basit olmaktan çıkınca callback modeli değerini gösteriyor: yapı için OnHTML, ham payload için OnResponse, yoksa hiç görmeyeceğin hatalar için OnError. CI üzerinden zamanlanmış şekilde taradığın statik ya da API destekli hedeflerde güçlü ve düşük drama’lı bir seçim.
Hedeflerin JavaScript’e yaslanıyorsa ya da en azından ikinci bir araç ekle. Colly, önüne koyduğum her client-render edilmiş sayfada 0 döndürdü ve bu bir ayar değil, tasarım gereği. Ekibin Go ile çalışmıyorsa ve birkaç siteyi scrape etmek için bile toolchain ayağa kaldırmak istemiyorsan yine uzak dur — dil yatırımı gerçek ve bakım sorumluluğu da sende. Yapıyı kodla sen şekillendirmek yerine sana doğrudan yapılandırılmış veri gelmesini istiyorsan, Colly’nin callback’leri işi tamamen senin tarafına bırakır.
Alternatifler — yönetilen bir AI scraping API’si nerede devreye girer?
Colly, derleyip kendi başına çalıştırdığın ücretsiz ve açık kaynak bir kütüphanedir. Go kodu, callback’ler, crawl mantığı ve çalıştığı makine sana aittir — karşılığında istek başına hiçbir ücret ödemezsin ve operasyonun tamamı içeride kalır. Go kullanan bir ekip için bu savunulabilir bir çözümdür; tek binary ile deploy etmek de gerçekten keyiflidir.
Durduğu iki yer, başka bir şeyle karşılaştırmaya değer iki yerdir. Birincisi JavaScript — Colly onu render etmez, dolayısıyla browser eklemediğin sürece client-side içerik masadan kalkar. İkincisi yapı — Colly callback verir, temiz çıktıyı şekillendirme işini senin koduna bırakır. Yönetilen bir AI scraping API’si bu iki noktaya farklı cevap verir. Thunderbit'in geliştirici paketi JS rendering’i halleder ve yapılandırılmış veriyi sunucu tarafında döndürür. POST /distill, bir sayfayı temiz, LLM’ye hazır Markdown’a dönüştürür; dinamik içerik ve anti-bot katmanı senin yerine yönetilir. POST /extract, tanımladığın JSON Schema’ya göre yapılandırılmış JSON döndürür; sayfa tam browser render gerektiriyorsa renderMode ile bunu açabilirsin. AI agent’lar ve coding assistant’lar için bir Thunderbit MCP server var — thunderbit_suggest_fields ücretsizdir, böylece bir sayfanın neler sunduğunu taahhüt vermeden önce görebilirsin — ayrıca terminal, CI ve cron için npx @thunderbit/thunderbit-cli ile çalıştırabileceğin bir CLI bulunur.
Web Veri Çıkarma için Thunderbit’i Deneyin
Buradaki denge daha iyi ya da daha kötü meselesi değil. İşin nerede yaşayacağı meselesi. Colly ile rendering (yok), parsing ve bakım işlerini kendi derlenmiş binary’nizin içinde tutarsın; çağrı başına sıfır maliyet ödersin ama site yapısı değişince sen uğraşırsın. Yönetilen API’de ise JS rendering, anti-bot ve yapılandırılmış çıktıyı devredersin; bu ayrıcalık için çağrı başına ödeme yaparsın. Küçük, Go-native, HTML ya da JSON destekli ve sahiplenip bakımını yapmaktan mutlu olduğun hedefler mi? Colly’nin kontrolü ve hızı açık ara öne çıkar. JavaScript ağırlıklı sayfalar mı, yoksa bir callback daha yazmak yerine sana şemaya uygun JSON gelsin mi istiyorsun? Yönetilen yolun lehine olan argüman budur. Daha geniş tabloyu görmek istersen, en iyi web scraping araçları ve en iyi web scraping GitHub projeleri derlemeleri, Colly gibi bir kütüphanenin browser tabanlı ve yönetilen seçeneklerin yanında nerede durduğunu gösteriyor.
Sonuç
Colly’yi kullanmalı mısın? Evet — eğer Go yazıyorsan ve HTML ya da JSON tarıyorsan, “hızlı crawler” ününün vaat ettiklerini yerine getiriyor; üstelik artık bu ünün arkasında sayılar da var. Statik çıkarımda tam isabet. OnResponse ile temiz JSON. 500 hatasının kaybolmak yerine düzgün biçimde OnError’a düşmesi. 17 sayfaya ulaşan depth-2 crawl. Tüm bunlar, runtime bağımlılığı olmayan tek bir statik binary’ye derlenmiş halde geliyor; bu kategorinin içinde bulabileceğin en rahat deploy hikâyelerinden biri.
Yine de iddiaları dürüstçe ölçmek gerek. JavaScript render etmez — testimdeki her client-side sayfa 0 döndü ve bu kalıcı bir durum, gözden kaçırdığın bir ayar değil. Go toolchain gerektirir; bu yüzden Go kullanmayan ekipler peşin bir kurulum maliyeti öder. Kurduğun module (v2.3.0), en yeni etiketli release’in (v2.2.0) önünde olduğu için sayfalar uyuşmadığında paniğe kapılma. Ve burada “hızlı”, ölçtüğüm çıkarım yolu demektir; henüz koşmadığım bir throughput benchmark’ı değil. Bu sınırlar içinde Colly hızlı, güvenilir ve gerçekten dağıtılabilir bir Go crawler’dır — ve sen ondan JavaScript çalıştırmasını istemeyi bıraktığın anda ününü hak eder.
Web Veri Çıkarma için Thunderbit’i Deneyin Get Started Free
SSS
Colly gerçekten hızlı mı, bunun arkasında bir sayı var mı? Benim ölçtüğüm temel akış için önemli olan anlamda hızlı: derlenmiş Go, statik çıkarımda tam isabet (12/12 katalog ürünü), temiz JSON işleme ve 17 sayfaya ulaşan depth-2 crawl — hepsi tek bir statik binary içinden. Ancak Scrapy’ye karşı bir throughput benchmark’ı çalıştırmadım; dolayısıyla “hızlı”yı başa baş hız skoru değil, ölçtüğüm çıkarım davranışı olarak değerlendirin.
Colly JavaScript ile render edilen sayfaları scrape edebilir mi? Hayır. Colly bir HTTP crawler’dır — HTML indirir ve ayrıştırır ama browser çalıştırmaz. JavaScript ile render edilen test ortamı 0 kart döndürdü; halka açık Quotes JS sayfası da 0 döndürdü. Client-side içerik için Colly’yi bir renderer ile eşleştirmen ya da browser rendering’i yerleşik gelen bir araç kullanman gerekir.
Colly kullanmak için Go bilmem gerekiyor mu?
Evet. Colly tek başına çalışan bir CLI değil, bir Go kütüphanesidir — içe aktarırsın, callback’ler (OnHTML, OnResponse, OnError) kaydedersin ve derlersin. Test yaptığım makinede Go yoktu; kurulum bir toolchain (1.26.5) yüklemekle başladı. Ekibiniz zaten Go kullanmıyorsa, gerçek kurulum maliyeti budur.
Neden kurduğum sürüm Colly’nin en yeni GitHub release’iyle eşleşmiyor?
Çünkü Go module’ü ile GitHub release etiketi zaman içinde birbirinden ayrılmış. Go proxy’deki en güncel module v2.3.0 (Aralık 2025), GitHub’daki en yeni etiketli release ise v2.2.0 (Mart 2025). Ben v2.3.0’u test ettim. Bu, module ve tag farkından kaynaklanan bir durum; bozuk kurulum değil.
Colly ticari kullanım için ücretsiz mi? Evet, Apache-2.0 lisanslı; yani esnek ve ticari kullanıma uygun. Her zamanki gibi, üzerine bir şey inşa etmeden önce güncel lisansı repo üzerinden kontrol et.


