Bu proje, Bun, TypeScript ve Playwright kullanılarak geliştirilmiş, çok kanallı (multi-threaded) ve yüksek performanslı bir web kazıma (scraping) uygulamasıdır. books.toscrape.com üzerindeki kitap verilerini paralel worker'lar kullanarak çeker ve Excel dosyasına kaydeder.
- Multi-Threaded Mimari: Web Web API
Workerthreadleri kullanarak eş zamanlı veri çekme. - Yüksek Performans: Aynı anda birden fazla sayfa işlenir, işlem süresi worker sayısı ile ters orantılı kısalır.
- Akıllı Dağıtım: Merkezi bir dağıtıcı (dispatcher), boşta kalan worker'a anlık olarak yeni görev atar (Race condition engellenmiştir).
- Stealth Mod:
puppeteer-extra-plugin-stealthile bot korumalarını atlatma yeteneği. - Dayanıklılık (Resilience):
- Tarayıcı çökmelerine karşı otomatik iyileştirme ve yeniden başlatma (Browser Reuse & Restart).
- Başarısız sayfalar için otomatik tekrar deneme (Retry Mechanism).
- Graceful Shutdown: İşlem beklenmedik şekilde kesilse bile (CTRL+C), o ana kadar çekilen veriler kaybolmaz ve kaydedilir.
- Excel Çıktısı: Sonuçlar okunaklı ve formatlı bir
scraped_books.xlsxdosyasına aktarılır.
Projeyi çalıştırmak için bilgisayarınızda Bun kurulu olmalıdır.
-
Bağımlılıkları yükleyin:
bun install
-
Playwright tarayıcılarını kurun:
bun x playwright install chromium
Uygulamayı başlatmak için:
bun run index.tsWorker sayısını değiştirmek için index.ts dosyasındaki startWorkers(10) parametresini güncelleyebilirsiniz:
// index.ts
async function main() {
// 10 adet worker ile başlatır
startWorkers(10);
}index.ts: Uygulamanın giriş noktası. Worker'ları başlatır, gelen verileri toplar ve ilerlemeyi terminale basar.scraper.ts: Worker'ların yönetiminden ve iş dağıtımından (dispatching) sorumludur.scraper.worker.ts: Asıl işi yapan (browsing/scraping) kodun bulunduğu yer. Her worker kendi Playwright instance'ını yönetir.entity.ts: Tip tanımlamaları (Interface'ler ve Type'lar).export.ts: Verileri Excel (xlsx) formatına çeviren modül.
Sistem, ağ kopuklukları veya site kaynaklı hatalar yüzünden bir sayfanın yüklenememesi durumunda pes etmez.
- Her sayfa için tanımlı 3 yeniden deneme (retry) hakkı vardır.
- Eğer bir tarayıcı (browser instance) kilitlenirse, worker bunu fark eder, tarayıcıyı öldürür ve yeni bir tane başlatarak kaldığı yerden devam eder.
İşlem tamamlandığında veya manuel olarak durdurulduğunda, proje kök dizininde scraped_books.xlsx dosyası oluşturulur.