Skip to content

k19-sudo/scraping-zyte-books

Repository files navigation

Distributed Book Scraper (Bun + Playwright)

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.

Özellikler

  • Multi-Threaded Mimari: Web Web API Worker threadleri 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-stealth ile 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.xlsx dosyasına aktarılır.

Kurulum

Projeyi çalıştırmak için bilgisayarınızda Bun kurulu olmalıdır.

  1. Bağımlılıkları yükleyin:

    bun install
  2. Playwright tarayıcılarını kurun:

    bun x playwright install chromium

Kullanım

Uygulamayı başlatmak için:

bun run index.ts

Konfigürasyon

Worker 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);
}

Proje Yapısı

  • 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.

Hata Toleransı

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.

Çıktı

İşlem tamamlandığında veya manuel olarak durdurulduğunda, proje kök dizininde scraped_books.xlsx dosyası oluşturulur.

About

Playwright Multi-Threaded Scraper: Zyte Scraping Lab bünyesindeki kurgusal kitap mağazası senaryosu için optimize edilmiş, yüksek hızlı veri madenciliği aracı.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors