Kategori: Kazıma
Python ve Go ile Ölçeklenebilir Web Scraping Mimarisi Kurulumu

Python ve Go kullanarak web scraping için ölçeklenebilir, hekzagonal bir mimarinin nasıl kurulacağını öğrenin. PerimeterX ve HUMAN Security'yi atlatma tekniklerinde ustalaşın.
Ölçeklenebilir web scraping mimarisi nedir?
Ölçeklenebilir bir web scraping mimarisi, *neyi* toplamak istediğinizi *nasıl* topladığınızdan ayıran bir sistem tasarımıdır. Böylece yeni kaynak eklemek, ağ stratejisini değiştirmek veya çalışma zamanını değiştirmek iş mantığını yeniden yazmayı gerektirmez. Pratikte bu, portlar-ve-adaptörler (hexagonal) düzeni demektir: ağ, ayrıştırma, depolama ve zamanlama için değiştirilebilir adaptörlerle çevrelenmiş sabit bir çekirdek.
Alternatifi — her site için ayrı bir script — yaklaşık onuncu kaynağa kadar çalışır, sonrasında kimsenin sahiplenmek istemediği bir bakım yüküne dönüşür.
Scraping için neden hexagonal mimari?
Scraping sistemleri belirli bir biçimde bozulur: dış dünya sürekli değişirken iş kurallarınız sabit kalır. Bir site Cloudflare ekler, bir pazaryeri DOM yapısını değiştirir, proxy sağlayıcısı değişir, bir kategori ham HTTP yerine headless tarayıcı gerektirir.
Hexagonal mimari bu değişken kaygıların her birini bir portun arkasına koyar:
- Ağ adaptörü — isteğin nasıl yapıldığı ve nasıl parmak izi bıraktığı
- Ayrıştırıcı adaptörü — yanıtın nasıl yapılandırılmış kayda dönüştüğü
- Depolama adaptörü — kayıtların nereye yazıldığı
- Zamanlayıcı adaptörü — işin ne zaman ve hangi sıklıkta çalıştığı
Çekirdek — ürün modelleri, eşleştirme kuralları, doğrulama — bunların hiçbirini import etmez. Bir site TLS imzanızı engellemeye başladığında hattı değil, tek bir adaptörü değiştirirsiniz.
Siteler scraper'ları ağ katmanında nasıl tespit eder?
Amazon ve Walmart gibi siteler standart HTTP isteklerini TLS parmak izi (JA3/JA4) ile yakalar. Her HTTP istemcisi kendine özgü bir el sıkışma üretir — şifre paketi sıralaması, uzantılar, eliptik eğriler — ve bir Python istemcisinin parmak izi, User-Agent başlığı ne iddia ederse etsin Chrome'unkine hiç benzemez.
Ağ Adaptörü katmanımızda standart bir HTTP istemcisi yerine, tarayıcı davranışını TLS seviyesinde taklit eden adaptörler kullanırız. Go tabanlı sistemlerde Chrome'un TLS el sıkışma imzasını yeniden üretmek için curl_cffi kütüphanesini CGO sarmalayıcısıyla entegre ederiz. Python tarafında ise özel TLS adaptörleriyle httpx veya doğrudan curl_cffi kullanarak, PerimeterX ve HUMAN Security sensörlerini ilk istekte tetiklemeyen bağlantılar kurarız.
TLS'in ötesinde üç sinyal önemlidir:
- HTTP/2 çerçeve sıralaması ve başlık büyük/küçük harf düzeni — gerçek tarayıcılarla çoğu kütüphane arasında farklıdır
- İstek zamanlaması — kusursuz düzenli aralıklar, hacimden daha güçlü bir ipucudur
- IP itibarı — veri merkezi aralıkları, mesken IP'lerinden farklı puanlanır
Python mı Go mu — hangi katman hangisine?
Ekiplerin en uzun tartıştığı soru bu ve cevabı sıkıcı: ikisini de kullanın, iş yükü biçimine göre bölün.
- Fetch katmanı için Go. Goroutine'ler on binlerce eşzamanlı bağlantıyı ucuzlatır, yük altında bellek düz kalır ve tek bir binary her yere kurulur. Verimlilik burada kazanılır.
- Ayrıştırma, normalizasyon ve eşleştirme için Python. Veri ekosistemi rakipsizdir; ayrıştırma IO açısından hafif, mantık açısından yoğundur — yani geliştirme hızının ham hızı yendiği yerdir.
İkisini fonksiyon çağrısıyla değil kuyrukla bağlayın. Go worker'ları ham veriyi yayınlar, Python tüketicileri dönüştürür. Her taraf bağımsız ölçeklenir ve bir ayrıştırma hatası asla toplamayı durdurmaz.
Kuyruk ve zamanlayıcı nasıl tasarlanmalı?
İki kural üretim olaylarının çoğunu önler:
- Global değil, kaynak bazlı zamanlayın. Toplama sıklığı her kaynağın gerçek değişim hızını izlemelidir. Her şeyi saatlik çalıştırmak sabit kategorilerde bütçe harcar, hızlı kategorilerde yine de geride kalır.
- Yeniden denemeleri idempotent ve sınırlı yapın. Başarısız bir fetch tekrarlanabilir olmalı ve eninde sonunda durmalıdır. Engelleyen bir siteye karşı sınırsız yeniden deneme, küçük bir arızayı IP yasağına çevirir.
Ham yanıtları ayrıştırmadan önce saklayın. Depolama ucuz, yeniden toplama değildir — üç hafta sonra bir ayrıştırıcı hatası bulunduğunda, saklanmış veriyi yeniden işlemek, o zamandan beri düzenini değiştirmiş bir pazaryerini yeniden taramaktan iyidir.
Gözlemlenebilirlik neden kritik?
Scraping sistemleri kısmen ve sessizce bozulur. Bir kategoride seçici bozulur, hat başarılı rapor etmeye devam eder ve o kategori sessizce boş değer döndürür.
En azından şunları izleyin:
- Kaynak bazında fetch başarı oranı — toplamda değil
- Ayrıştırma verimi — çekilen sayfa başına çıkarılan kayıt
- Alan bazında boş değer oranları — bozuk seçicileri kimse fark etmeden yakalar
- Tazelik dağılımı — ortalamanızı değil, en kötü kaydınızın yaşını bilin
Senkrondata bu mimariyi üretimde, 23 ülkede 500M+ satır üzerinde %97,2 veri doğruluğu SLA'i ile çalıştırır. Yukarıda anlatılan doğrulama katmanı, bu sayıyı temenni olmaktan çıkarıp savunulabilir kılan şeydir.
Kurmak mı, satın almak mı?
Bu yığını kurmak tamamen mümkündür — yukarıdaki bileşenler dürüst bir plandır. Ekiplerin hafife aldığı şey, işin hiç bitmemesidir: anti-bot sağlayıcıları sürekli değişiklik yayınlar ve bir scraper yalnızca karşı taraftaki bir sonraki dağıtıma kadar doğrudur.
Farkınız veriyi nasıl topladığınız değil onunla ne yaptığınızsa, E-ticaret Scraper API'miz ve Scraper API'lerimiz bu altyapıyı doğrudan sunar. Crawling'in nerede bitip scraping'in nerede başladığına karar veriyorsanız, veri tarama ve veri kazıma farkı rehberimiz konuyu ele alıyor.
Kerem
Stratejik Lider, Senkondata
Kerem, Senkondata'da veri mühendisliği ve pazar analizi alanlarında uzun yıllara dayanan uzmanlığıyla vizyoner bir liderdir.
Bizimle İletişime Geçin
Detaylı bir demo veya genel bakış oturumu için e-posta adresinizi bırakın, sizinle hemen iletişime geçelim.