Site değişince kırılmayan kazıyıcı: bir iddiayı test ettik
Web'den veri çeken herkesin bildiği bir acı vardır: kod bir sabah çalışmayı bırakır — site tasarımını güncellemiştir. `Scrapling` adlı Python kütüphanesi tam bu noktaya bir iddia atıyor: **sayfa değişse bile aradığınız elemanı yeniden bulurum.** Biz de bu iddiayı kurup çalıştırarak, kontrol gruplu bir düzenekle test ettik. Bir sebep daha var: Türkçe'de bu araç hakkında tek bir video bile yok — ilgi var, anlatan yok.
Site değişince kırılmayan kazıyıcı
Web'den veri çeken herkesin bildiği bir acı vardır: kod bir sabah çalışmayı
bırakır. Sunucu çökmüş değildir, internet kesik değildir — site tasarımını
güncellemiştir. Bir class adı değişmiş, bir div yer değiştirmiştir ve
sizin ayıklayıcınız artık boş dönmektedir.
Scrapling adlı Python kütüphanesi tam bu noktaya bir iddia atıyor: sayfa
değişse bile aradığınız elemanı yeniden bulurum. 77 binden fazla yıldız
toplamış, iki yıllık bir proje. Biz de bu iddiayı test ettik — okuduğumuzu
aktarmadık, kurup çalıştırdık ve sonucu ölçtük.
Bu yazının bir sebebi daha var: Türkçe'de bu araç hakkında tek bir video bile yok.
Rakam tahmin değil, ölçüm. İki ayrı tarama yapıldı: İngilizce'de bu araç için dört nitelikli video bulundu; Türkçe'de 212 video tarandıktan sonra sayı sıfır çıktı. Aynı taramada "python ile veri çekme" arayan bir kitlenin fazlasıyla var olduğu da görüldü — sorgunun sonuçlarının neredeyse tamamı Türkçe'ydi.
Yani ilgi var, anlatan yok. Bu yazı o boşluğa yazılıyor.
İddia nasıl sınanır?
"Test ettik" demek kolaydır. Bir iddianın gerçekten sınandığını gösteren şey kontrol grubudur: aynı işi, aracın özelliği kapalıyken de yapmak. İkisi de başarılı olursa test bir şey kanıtlamamıştır — çünkü belki iş zaten kolaydı.
Kurduğumuz düzenek şu:
- Bir sayfadan on alıntı çekildi ve hedef eleman mühürlendi.
- Sayfa bozuldu —
class="text"etiketi on yerde değiştirildi. Bu, bir sitenin gece yarısı tasarım güncellemesi yapmasının birebir taklidi. - Eski seçici, bozulmuş sayfada arandı — hem özellik kapalıyken hem açıkken.
Sonuç:
[kontrol] ozellik KAPALI -> 0 eleman <- secici gercekten kirildi
[deney] ozellik ACIK -> 1 eleman <- kurtardi
Kontrol grubu sıfır döndü; yani bozma gerçekti, seçici gerçekten kırılmıştı. Özellik açıkken araç elemanı bulup çıkardı ve içerik doğruydu. İddia doğrulandı.
Ama tam hikâye bu değil
Orijinal on elemandı, kurtarılan bir. İlk bakışta "demek ki zayıf" denebilir — nitekim biz de az kalsın öyle yazacaktık. Eşiği düşürdük, değişmedi: kırkta da, yirmi beşte de, onda da tek eleman.
Sonra o tek elemandan aracın başka bir işlevini çağırdık:
kurtarilan 1 elemandan "benzerlerini bul" -> 9 benzer
1 + 9 = 10 = orijinal sayi
Araç iki adımlı çalışıyor. Kırılan seçiciden bir çıpa kurtarıyor, listeyi o çıpadan yeniden kuruyorsunuz. Belgelerde bu kalıp öne çıkmıyor; yalnız ilk adıma bakan kullanıcı aracı haksız yere zayıf sanır.
Kurulumda kaybettiren yer
En pratik uyarı bu. Şu komut çalışır, sürüm numarası basar, her şey yolunda görünür:
pip install scrapling
Sonra ilk veri çekme denemenizde program çöker: No module named 'curl_cffi'.
Çünkü bu komut yalnız ayrıştırıcıyı kurar. Veri çekmek için:
pip install "scrapling[fetchers]"
Aracın dört ayrı paket grubu var: veri çekiciler, markdown dönüşümü, yapay zekâ entegrasyonu ve komut satırı kabuğu. Kurulum "başarılı" göründüğü, çökme ise dakikalar sonra geldiği için burası kaybettiriyor.
Kurmadan önce: doğru paketi kurduğunuzdan emin olun
Bu testi yaparken kardeş bir çalışmadan uyarı geldi ve tam yerinde çıktı.
Aynı listedeki başka bir araç için şöyle bir tuzak ölçülmüş: GitHub'daki proje
bir tarayıcı, ama aynı adı taşıyan PyPI paketi tamamen farklı bir yazılım —
bir dosya şifreleme kütüphanesi. pip install yazan kişi aradığı aracı değil,
alakasız bir paketi kuruyor.
Bu yüzden kurduğumuz paketin kimliğini doğruladık:
pip show scrapling
Home-page: https://github.com/D4Vinci/Scrapling <- incelenen depoyla AYNI
Basit ama atlanan bir adım: paket sayfasındaki depo adresi, okuduğunuz projenin adresiyle aynı mı? Değilse durun.
Hız
Ölçtük: üç ardışık çekme 1,37 saniye, ortalama 0,46 saniye. Ayrıştırma maliyeti ise ölçülemeyecek kadar küçük — on elemanı bulmak sıfıra yakın sürdü. Yani darboğaz araç değil, ağın kendisi. Bu, günlük kullanımda beklediğiniz davranış.
Dürüstçe söylenmesi gereken: varsayılan gizlenme
Aracı hiç yapılandırmadan çalıştırdık ve kendi kayıt satırı şunu gösterdi:
Fetched (200) <GET https://quotes.toscrape.com/> (referer: https://www.google.com/)
Biz istemediğimiz hâlde araç, isteği Google'dan geliyormuş gibi gönderdi. Ayrıca kimlik taklidi ve gizli başlık seçenekleri de sunuyor.
Bunları test etmedik — ve bu bilinçli bir sınır. Gerçek bir sitenin bot korumasını aşmak test değil, ihlaldir. Testlerimizin tamamı kazıma eğitimi için açıkça yayımlanmış bir site üzerinde yapıldı.
Kurumsal bir işte kullanacaksanız bu davranışı bilerek yapılandırın: birçok sitenin kullanım şartları, kendinizi başka bir kaynaktan geliyormuş gibi göstermeyi yasaklar. Aracın suçu yok — ama varsayılanı "dürüst kimlik" değil.
Bir aracın iyi olması, anlatılmış olduğu anlamına gelmiyor
Bu testin yan bulgusu, aslında haberin kendisinden ilginç. Aynı çalışmada altı kazıma aracı için içerik taraması yapıldı ve şöyle bir tablo çıktı:
Listenin en kurumsal projesi — 58 ayrı katkıcısı olan, Apache lisanslı, ciddi bir Rust aracı — yalnız iki video getirdi ve ikisi de kalite eşiğini geçemedi. Buna karşılık en çok yıldızı olan araç 24 video ile listeyi açık ara önde bitirdi.
Yani içerik bolluğu araç kalitesini ölçmüyor. Anlatılmamış olmak kötü olmak değil, çoğu zaman sadece kimsenin henüz oturup anlatmamış olması. Bir araç seçerken YouTube'daki video sayısına bakmak, kütüphane seçerken kapak tasarımına bakmaya benziyor.
Kime uygun, kime değil
Uygun: Python'da düzenli veri çeken, sitenin tasarım değiştirmesinden bıkmış olan; lisans konusunda rahat davranmak isteyen (BSD-3, ticari kullanıma en esnek lisanslardan).
Uygun değil: tek seferlik bir sayfa çekecekseniz fazla; sayfayı doğrudan yapay zekâya uygun metne çevirmek istiyorsanız bu bir içerik API'si değildir, o başka bir araç sınıfıdır.
Buradaki ayrım önemli: "kazıma aracı" tek bir kategori değil. İçerik API'leri, kazıma çatıları ve gizli tarayıcılar farklı işler yapar. Yanlış sınıftan araç seçmek, en pahalı hatadır.
Kendi hatalarımız
Şeffaflık adına: testte üç kez yanıldık ve üçü de aracın kusuru değildi. Fonksiyon adlarını belgelerden okumak yerine varsaydık; olmayan bir parametre aradık, olmayan bir kısayol çağırdık. Bir aracı test ederken en sık yapılan hata bu — çalışmıyor sandığınız şey çoğu zaman yanlış kullandığınız şeydir.
Test kaydı: Scrapling 0.4.15 · macOS · Python 3.14.6 · izole sanal ortam · 2 Eylül 2026. Test betikleri ve ham JSON çıktıları radar kayıtlarında saklıdır. Sayılar o ölçüm anına aittir; araç sürümleri hızlı değişir, kendi işinizde kendi ölçümünüzü alın.
Bu haber yapay zekâ desteğiyle hazırlandı. Kaynaklar doğrulandı; yayın sorumluluğu yayıncıya aittir.