Skip to content

T3 AILE için geliştirilmiş olan, python tabanlı, açık kaynak kodlu, standart ve interaktif mod olmak üzere iki adet terminal kullanım arayüzü sunan, web scrapper aracıdır.

License

Notifications You must be signed in to change notification settings

brkmustu/t3aile_kasirga

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

T3 AILE - Kasırga - Web Kazıyıcı

🧠 Proje Hakkında

T3 AI'LE, Türkiye'nin büyük dil modeli (LLM) oluşturma vizyonu kapsamında geliştirilmiş açık kaynaklı bir projedir. Bu proje, kullanıcılardan alınan doğal dil sorgularını web üzerinden aratıp, sonuçları büyük dil modeli ile işleyerek zenginleştirilmiş yanıtlar üretir.

Ana hedefimiz, Türkçe dilinde güçlü bilgi tabanı oluşturarak Türkiye'ye ait özgün ve güncel içerikleri, yapay zeka destekli bir pipeline ile kullanıcıya sunmaktır.


T3 AILE Kasırga, web sitelerinden yapılandırılmış veri çıkarmak için tasarlanmış Python tabanlı bir web kazıyıcı aracıdır. Hem geleneksel HTML kazımayı hem de JavaScript ile oluşturulan sayfaları (SPA'lar) destekler, playwright ile sonsuz kaydırma yönetimi özelliklerine sahiptir.

Temel Özellikler

  • 🚀 Etkileşimli CLI - Slash komutları ve otomatik tamamlama ile
  • 🌐 JavaScript Desteği - SPAs ve dinamik içerik için Playwright ile
  • 📜 Sonsuz Kaydırma Yönetimi - Playwright ile sonsuz kaydırma yönetimi
  • 🎯 CSS Seçici Tabanlı alan çıkarma
  • 💾 Kalıcı Depolama - Kazıyıcılar ve stratejiler için
  • 🔄 İş Akışı Kontrolü - Kazımadan önce siteleri kontrol etme
  • 📊 Çoklu Çıktı Formatları - JSON, tablo görünümü, dosya dışa aktarma
  • 🔗 Liste/Detay Kazıma - Liste sonuçlarından detay sayfalarını otomatik işleme
  • 📦 Konteyner Alanları - Tekrarlayan öğelerden yapılandırılmış veri çıkarma
  • 🚅 Çoklu İş Parçacığı Desteği - Detay kazıma için paralel işleme
  • 💾 Artımlı Dosya Yazma - Veri kaybını önlemek için gerçek zamanlı kaydetme
  • Gerçek Zamanlı Durum Görüntüleme - Etkileşimli modda canlı işlem ilerlemesi
  • 📤 Dışa/İçe Aktarma - Projeler arasında kazıyıcı yapılandırmalarını paylaşma
  • 🔒 Proxy Yönetimi - Proxy rotasyonu ve doğrulama desteği
  • 🎭 User-Agent Rotasyonu - Otomatik UA değiştirme ve Playwright stealth
  • 🔄 Retry Mekanizması - Exponential backoff ile otomatik yeniden deneme
  • ⏱️ Rate Limiting - Domain bazlı hız kontrolü
  • 📅 Görev Zamanlayıcı - Cron ve interval ile otomatik kazıma
  • 🔄 Otomatik Kaydetme - Sonuçlar standart dosyalara kaydedilir (output.{code}.json)
  • 🎯 Doğrudan İşlemler - --with parametreleri ile seçim yapmadan çalışma

Installation

# Clone the repository
git clone https://github.com/brkmustu/t3aile_kasirga.git
cd kasirga

# Create virtual environment
python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Install Playwright browsers (for JavaScript support)
playwright install chromium

Hızlı Başlangıç

# Run in interactive mode
python -m kasirga

# Or use CLI commands directly
python -m kasirga scraper create --code mysite --url https://example.com
python -m kasirga check --code mysite
python -m kasirga scrape --code mysite

💼 Gelişmiş Özellikler: Proxy yönetimi, user-agent rotasyonu, retry mekanizması, rate limiting ve görev zamanlayıcı için ADVANCED_FEATURES.md dosyasına bakın.

İş Akışı Genel Bakışı

Standard Flow:
┌─────────────┐     ┌──────────────┐     ┌────────────┐     ┌────────────┐
│   Scraper   │ --> │   Check      │ --> │  Strategy  │ --> │   Fields   │
│  (Create)   │     │  (Analyze)   │     │  (Create)  │     │  (Define)  │
└─────────────┘     └──────────────┘     └────────────┘     └────────────┘
       │                    │                    │                    │
       v                    v                    v                    v
    Website             Detect SPA          Extraction          Field
    Definition         & Approve           Approach           Selectors
                                                                     │
                                                                     v
                                                             ┌──────────────┐
                                                             │    Scrape    │
                                                             │  (Execute)   │
                                                             └──────────────┘

List/Detail Flow:
┌─────────────┐     ┌────────────┐     ┌──────────────┐
│ LIST Scraper│ --> │   Scrape   │ --> │ Output URLs  │
│   + Fields  │     │   (URLs)   │     │  (.json)     │
└─────────────┘     └────────────┘     └──────────────┘
                                               │
                                               v
┌─────────────┐     ┌────────────┐     ┌──────────────┐
│DETAIL Scraper│ --> │ Auto-load  │ --> │ Multi-thread │
│ (--with list)│     │ List URLs  │     │   Scraping   │
└─────────────┘     └────────────┘     └──────────────┘

Temel İş Akışı

1. Kazıyıcı Oluşturma

# Standart site
kasirga scraper create --code mysite --url https://example.com

# Sonsuz kaydırmalı site (maksimum kaydırma sayısını ayarla)
kasirga scraper create --code scroll-site --url https://example.com --max-scrolls 20

# Liste kazıyıcı (birden fazla öğe içeren sayfalar için)
kasirga scraper create --code products --url https://example.com/products --type list --base-url https://example.com

# Detay kazıyıcı (bireysel öğe sayfaları için) - --with parametresi gerekli
# URL isteğe bağlıdır çünkü liste kazıyıcısından URL'leri kullanacaktır
kasirga scraper create --code product-detail --type detail --with products

2. Siteyi Kontrol Etme (Gerekli)

Kazımadan önce, sitenin JavaScript renderlaması gerektirip gerektirmediğini algılamak için siteyi kontrol etmelisiniz:

kasirga check --code mysite

# Kontrol şunları yapacaktır:
# - Sitenin bir SPA olup olmadığını algılar (React, Vue, Angular, vb.)
# - Sonsuz kaydırma desenlerini belirler
# - Tembel yüklenen içeriği algılar
# - Devam etmek için onayınızı ister

3. Strateji Oluşturma

# Önce kazıyıcıyı seçin
kasirga scraper select mysite

# Manuel bir strateji oluşturun
kasirga strategy create --name main --manual

4. Alanları Tanımlama

# Düzenli alanlar ekle
kasirga fields add -n title -s "h1.title"                    # Metin çıkarma
kasirga fields add -n price -s "span.price"                  # Tek değer
kasirga fields add -n items -s "div.item" -m                 # Çoklu değerler
kasirga fields add -n link -s "a.next" -t attribute -a href  # Öznitelik
kasirga fields add -n count -s ".comment" -t count           # Öğeleri sayma

# Veya yapılandırılmış veri için konteyner alanı kullan
kasirga fields add-container -n products -s "div.product"
# Sonra alt alanları etkileşimli olarak tanımla

5. Kazımayı Yürütme

# Temel kazıma (output.{scraper-code}.json dosyasına otomatik kaydeder)
kasirga scrape

# Sonsuz kaydırma için özel kaydırma ayarları ile
kasirga scrape --max-scrolls 30

# Belirli bir dosyaya kaydet
kasirga scrape --output data.json --json

Etkileşimli Mod

Kasırga, otomatik tamamlama ve komut geçmişi ile güçlü bir etkileşimli mod sunar:

python -m kasirga

Slash Komutları

Tüm mevcut komutları otomatik tamamlama ile görmek için / yazın:

  • /scraper - Kazıyıcıları yönetme (oluştur/seç/listele/güncelle)
  • /strategy - Stratejileri yönetme (oluştur/seç/listele)
  • /fields - Çıkarılacak alanları tanımlama (ekle/konteyner-ekle/kaldır/listele)
  • /check - Siteyi analiz etme ve kazıma için onaylama
  • /scrape - Mevcut yapılandırma ile kazımayı yürütme
  • /list - Kazıyıcıları, stratejileri veya alanları listeleme
  • /status - Mevcut yapılandırmayı gösterme
  • /clear - Ekranı temizleme
  • /help - Detaylı yardım gösterme
  • /exit - Uygulamadan çıkma

Klavye Kısayolları

  • Ctrl+C - Çıkış
  • Ctrl+L - Ekranı temizle
  • Ctrl+H - Yardımı aç/kapat
  • Tab - Otomatik tamamla (slash komutlarıyla da çalışır!)
  • ↑/↓ - Komut geçmişi
  • PageUp/PageDown - Mesajları kaydır
  • ESC - Yardımı veya komut listesini kapat (açıkken)
  • / - Tüm mevcut komutları göster

Örnek Etkileşimli Oturum

╭─────────────────── Kasırga Web Scraper ───────────────────╮
│ Welcome to Kasırga Interactive Mode! 🚀                   │
│                                                           │
│ Type help for available commands or exit to quit.         │
│ Use ↑/↓ to navigate command history, Tab for suggestions. │
╰───────────────────────────────────────────────────────────╯

Kasırga> /scraper create --code news --url https://news.site.com
✓ Created scraper 'news' for https://news.site.com
Scraper 'news' is now selected

[news]> /check
Checking https://news.site.com...
╭───── Check Results ─────╮
│ URL: https://news.site.com   │
│ Requires JavaScript: Yes      │
│ Page size: 45,234 bytes      │
│ Frameworks: React            │
│ Infinite scroll: Yes         │
╰─────────────────────────╯

Approve this scraper for scraping? (Y/n): y
✓ Scraper 'news' approved for scraping

[news]> /strategy create --name articles --manual
✓ Created manual strategy 'articles' (code: articles)

[news] [articles]> /fields add -n title -s "h2.article-title" -m
✓ Added field 'title'
Will extract multiple matches

[news] [articles]> /scrape --max-scrolls 5
Scraping https://news.site.com...
Using Playwright for JavaScript rendering...
Max scrolls: 5
✓ Scraping completed successfully

┌─────────────── Scraped Data ───────────────┐
│ Field │ Value                              │
├───────┼────────────────────────────────────┤
│ title │ Breaking: Major Discovery...       │
│       │ Scientists Announce New...         │
│       │ Economy Shows Signs of...          │
│       │ Sports: Championship Finals...     │
│       │ Technology: AI Breakthrough...     │
│       │ ... and 47 more items             │
└───────┴────────────────────────────────────┘

Komut Referansı

Kazıyıcı Komutları

# Yeni bir kazıyıcı oluştur
kasirga scraper create --code <code> --url <url> [options]

# Seçenekler:
# --type <type>        Kazıyıcı türü: list veya detail
# --with <list-code>   Liste kazıyıcı kodu (detail türü için gerekli)
# --base-url <url>     Liste kazıyıcıları için temel URL
# --max-scrolls <n>    Sonsuz kaydırma için maksimum kaydırma sayısı (varsayılan: 10)
# --scroll-start <n>   Bu yüzdeden kaydırmaya başla 0-100 (varsayılan: 0)
# --scroll-step <n>    Her seferinde kaydırılacak piksel (varsayılan: en alta)

# Kazıyıcı yapılandırmasını güncelle
kasirga scraper update <code> [options]

# Tüm kazıyıcıları listele
kasirga scraper list

# Bir kazıyıcı seç
kasirga scraper select <code>

# Mevcut kazıyıcıyı göster
kasirga scraper current

# Bir kazıyıcıyı sil
kasirga scraper delete <code>

# Kazıyıcıları dışa aktar
kasirga scraper export --output scrapers.json              # Tüm kazıyıcıları dışa aktar
kasirga scraper export -o site.json -c mysite              # Tek kazıyıcıyı dışa aktar
kasirga scraper export -o sites.json -c site1 -c site2     # Birden fazla kazıyıcıyı dışa aktar

# Kazıyıcıları içe aktar
kasirga scraper import <file> [--merge|--skip]

# Detaylı durumu göster
kasirga scraper status

Kontrol Komutu (Kazımadan Önce Gerekli)

# Sitenin JavaScript renderlaması gerektirip gerektirmediğini kontrol et
kasirga check [--code <code>] [--force]

# Kontrol komutu şunları yapacaktır:
# - JavaScript çerçevelerini algılar (React, Vue, Angular, Next.js, Gatsby)
# - Sonsuz kaydırma desenlerini belirler
# - Tembel yüklenen görselleri bulur
# - Sayfa özelliklerini ölçer
# - Devam etmek için onay ister

# Detay kazıyıcıları için:
# - Yapılandırılmış liste kazıyıcısından ilk URL'yi otomatik kullanır
# - URL yapısının doğru çalıştığını doğrular
# - Detay sayfası yapısını test eder

Strateji Komutları

# Bir strateji oluştur
kasirga strategy create --name <name> [--manual]

# Bir strateji seç
kasirga strategy select <code>

# Stratejileri listele
kasirga strategy list

Alan Komutları

# Bir alan ekle (kazıyıcı/strateji seçimi --with-scraper/--with-strategy ile isteğe bağlı)
kasirga fields add -n <name> -s <selector> [-t <type>] [-a <attr>] [-m] [--with-scraper <code>] [--with-strategy <code>]

# Alan seçenekleri:
# -n, --name           Alan adı
# -s, --selector       CSS seçici
# -t, --type           Alan türü: text (varsayılan), attribute, html, count, container
# -a, --attribute      Öznitelik adı (attribute türü için gerekli)
# -m, --multiple       Tüm eşleşen öğeleri çıkar
# --with-scraper       Belirli bir kazıyıcı kullan (mevcut seçimi geçersiz kılar)
# --with-strategy      Belirli bir strateji kullan (mevcut seçimi geçersiz kılar)
# --override           Aynı isimdeki mevcut alanı geçersiz kıl

# Yapılandırılmış veri için konteyner alanı ekle
kasirga fields add-container -n <name> -s <container-selector> [--with-scraper <code>] [--with-strategy <code>]
# Sonra alt alanları etkileşimli olarak tanımla

# Bir alanı kaldır
kasirga fields remove <name> [--with-scraper <code>] [--with-strategy <code>]

# Tüm alanları listele
kasirga fields list [--with-scraper <code>] [--with-strategy <code>]

# Tüm alanları temizle
kasirga fields clear [--with-scraper <code>] [--with-strategy <code>]

Kazıma Komutu

# Kazımayı yürüt
kasirga scrape [options]

# Seçenekler:
# --code <code>         Belirli bir kazıyıcı kullan (mevcut seçimi geçersiz kılar)
# --strategy <code>     Belirli bir strateji kullan  
# --output <file>       Sonuçları dosyaya kaydet
# --json               JSON olarak çıktı
# --max-scrolls <n>     Maksimum kaydırma sayısını geçersiz kıl
# --scroll-start <n>    Kaydırma başlangıç yüzdesini geçersiz kıl
# --scroll-step <n>     Kaydırma adım pikselini geçersiz kıl
# --with <list-code>    Detay kazıma için liste kazıyıcısını geçersiz kıl
# --with-check          Kazıyıcı onaylanmadıysa kontrol komutunu çalıştır
# --with-approve        Kontrol sonrası otomatik onayla (--with-check gerektirir)
# --threads <n>         Detay kazıma için paralel iş parçacığı sayısı (varsayılan: 1)
# --resume              Son kazınan URL'den detay kazımaya devam et

# Not: Detay kazıyıcıları otomatik olarak yapılandırılmış liste kazıyıcılarını kullanır
# Çıktı belirtilmezse output.{scraper-code}.json dosyasına otomatik kaydedilir

Gelişmiş Özellikler

Liste/Detay Kazıma Deseni

Kasırga, şu durumlarda kazıma için güçlü bir desen destekler:

  1. Önce öğe URL'lerini almak için bir liste sayfası kazınır
  2. Sonra tam bilgi için her detay sayfası kazınır

Liste/Detay Kazıyıcıları Kurma

# 1. Ürün listesi sayfası için bir liste kazıyıcı oluştur
kasirga scraper create --code products-list --url https://shop.com/products \
  --type list --base-url https://shop.com

# 2. Bireysel ürün sayfaları için bir detay kazıyıcı oluştur  
# URL gerekmez - liste kazıyıcısından URL'leri kullanacaktır
kasirga scraper create --code product-detail --type detail --with products-list

# 3. Her iki kazıyıcıyı da kontrol et
kasirga check --code products-list  # Liste sayfasını kontrol et
kasirga check --code product-detail  # Liste çıktısından ilk URL'yi otomatik kullanır

# 4. Her ikisi için stratejiler oluştur
kasirga scraper select products-list
kasirga strategy create --name listing --manual

# ÖNEMLİ: Liste stratejisi 'url' veya 'link' adında bir alana SAHİP OLMALIDIR
kasirga fields add -n title -s "h3.product-title" -m
kasirga fields add -n price -s "span.price" -m
kasirga fields add -n url -s "a.product-link" -t attribute -a href -m

# 5. Detay kazıyıcı stratejisini ayarla
kasirga scraper select product-detail
kasirga strategy create --name details --manual
kasirga fields add -n name -s "h1.product-name"
kasirga fields add -n description -s "div.description"
kasirga fields add -n specs -s "table.specs"

Liste/Detay Kazımayı Yürütme

# 1. Önce, tüm ürün URL'lerini almak için listeyi kazı
kasirga scrape --code products-list
# Bu otomatik olarak output.products-list.json dosyasına kaydedilir

# 2. Sonra tüm detay sayfalarını kazı (yapılandırılmış listeyi otomatik kullanır)
kasirga scrape --code product-detail

# Daha hızlı işleme için, birden fazla iş parçacığı kullan
kasirga scrape --code product-detail --threads 5

Detay kazıyıcı şunları yapacaktır:

  • Liste kazıyıcı çıktısını yükler
  • 'url' veya 'link' alanından URL'leri çıkarır
  • Gerekirse temel URL ile birleştirir
  • Her detay sayfasını paralel olarak kazır (threads > 1 ise)
  • Veri kaybını önlemek için sonuçları artımlı olarak kaydeder
  • Hız istatistikleri ile gerçek zamanlı ilerlemeyi gösterir

Konteyner Alanları - Yapılandırılmış Veri Çıkarma

Konteyner alanları, ürün kartları, makale listeleri vb. gibi tekrarlayan öğelerden yapılandırılmış veri çıkarmanıza olanak tanır.

# Bir konteyner alanı ekle
kasirga fields add-container -n products -s "div.product-card"

# Sonra alt alanları etkileşimli olarak tanımla:
# Alt alan adı: title
# CSS seçici: h3.product-title
# Tür: text
#
# Alt alan adı: price
# CSS seçici: span.price
# Tür: text
#
# Alt alan adı: url
# CSS seçici: a.product-link
# Tür: attribute
# Öznitelik adı: href

Result:

{
  "products": [
    {
      "title": "Product 1",
      "price": "$29.99",
      "url": "/products/1"
    },
    {
      "title": "Product 2",
      "price": "$39.99",
      "url": "/products/2"
    }
  ]
}

Gelişmiş Sonsuz Kaydırma Kontrolü

Kasırga, sonsuz kaydırma davranışı üzerinde ince ayarlı kontrol sağlar:

1. Temel Kaydırma Kontrolü

# Maksimum kaydırma sayısını ayarla
kasirga scraper create --code feed --url https://example.com --max-scrolls 20

2. Belirli Konumdan Başlama

# Sayfanın %50'sinden kaydırmaya başla
kasirga scraper create --code middle --url https://example.com --scroll-start 50

3. Artımlı Kaydırma

# En alta gitmek yerine her seferinde 500 piksel kaydır
kasirga scraper create --code careful --url https://example.com --scroll-step 500

4. Birleşik Örnek

# %25'ten başla, her seferinde 300px kaydır, maksimum 15 kaydırma
kasirga scraper create --code custom --url https://example.com \
  --scroll-start 25 \
  --scroll-step 300 \
  --max-scrolls 15

# Çalışma zamanında geçersiz kıl
kasirga scrape --scroll-start 40 --max-scrolls 10

SPA Algılama

Kontrol komutu otomatik olarak şunları algılar:

  • Popüler çerçeveler (React, Vue, Angular, Next.js, Gatsby)
  • Dinamik içerik yükleme desenleri
  • Tembel yüklenen görseller
  • AJAX tabanlı içerik güncellemeleri

Alan Çıkarma Seçenekleri

Alan Türleri

  • text (varsayılan) - Öğelerden metin içeriği çıkarma
  • attribute - Belirli öznitelik değerlerini çıkarma (href, src, data-*, vb.)
  • html - Etiketler dahil ham HTML çıkarma
  • count - Eşleşen öğeleri sayma
  • container - Tekrarlayan öğelerden yapılandırılmış veri çıkarma (kartlar, öğeler, vb.)

Çoklu Değerler

Tüm eşleşen öğeleri çıkarmak için -m bayrağını kullanın:

# Tüm ürün adlarını çıkar
kasirga fields add -n products -s ".product-name" -m

# Tüm görsel URL'lerini çıkar
kasirga fields add -n images -s "img" -t attribute -a src -m

Örnekler

E-ticaret Ürün Listesi (Konteyner Alanları ile)

# Kaydırma ayarları ile kazıyıcı oluştur
kasirga scraper create --code shop --url https://shop.example.com/products \
  --max-scrolls 25 --scroll-start 10  # Başlık bannerlarını atla

# Siteyi kontrol et
kasirga check --code shop
# Onayla? Y

# Strateji oluştur
kasirga scraper select shop
kasirga strategy create --name products --manual

# Ürün kartları için konteyner alanı kullan
kasirga fields add-container -n products -s "div.product-card"
# Alt alanları tanımla:
# - name: h3.title (text)
# - price: span.price (text)
# - image: img (attribute: src)
# - url: a.details (attribute: href)
# - inStock: .stock-status (text)

# Kazı
kasirga scrape --output products.json --json

Kısmi Kaydırmalı Haber Akışı

# Üstteki öne çıkan makaleleri atla, ana akışı al
kasirga scraper create --code news-feed --url https://news.site.com \
  --scroll-start 30 \
  --scroll-step 400 \
  --max-scrolls 10

kasirga check --code news-feed
kasirga strategy create --name articles --manual

# Makale kartlarını çıkar
kasirga fields add-container -n articles -s "article.news-item"
# Alt alanlar: headline, summary, author, date, url

kasirga scrape --output news.json --json

Liste/Detay Deseni ile Emlak İlanı

# Adım 1: Emlak ilanları için liste kazıyıcı oluştur
kasirga scraper create --code properties-list --url https://realestate.com/properties \
  --type list --base-url https://realestate.com --max-scrolls 20

kasirga check --code properties-list
kasirga scraper select properties-list
kasirga strategy create --name listings --manual

# Liste sayfasından temel bilgileri ve URL'leri çıkar
kasirga fields add -n title -s "h3.property-title" -m
kasirga fields add -n price -s "span.price" -m  
kasirga fields add -n location -s "div.location" -m
kasirga fields add -n url -s "a.property-link" -t attribute -a href -m

# Adım 2: Tam emlak bilgileri için detay kazıyıcı oluştur
kasirga scraper create --code property-detail --type detail --with properties-list

kasirga check --code property-detail
kasirga scraper select property-detail
kasirga strategy create --name full-details --manual

# Detaylı bilgileri çıkar
kasirga fields add -n title -s "h1.property-name"
kasirga fields add -n price -s "div.price-main"
kasirga fields add -n description -s "div.description"
kasirga fields add -n bedrooms -s "span.bedrooms"
kasirga fields add -n bathrooms -s "span.bathrooms"
kasirga fields add -n area -s "span.area"
kasirga fields add -n images -s "div.gallery img" -t attribute -a src -m
kasirga fields add -n amenities -s "ul.amenities li" -m

# Adım 3: Kazıma iş akışını yürüt
# Önce tüm emlak URL'lerini al
kasirga scrape --code properties-list

# Sonra her emlak için tam detayları kazı (otomatik olarak properties-list kullanır)
kasirga scrape --code property-detail --threads 8

# Onaylanmadıysa otomatik kontrol ile
kasirga scrape --code property-detail --with-check --with-approve --threads 8

# Kesintiye uğrarsa devam et
kasirga scrape --code property-detail --threads 8 --resume

Haber Makalesi Kazıma

# Etkileşimli mod örneği
python -m kasirga

Kasırga> /scraper create --code news --url https://news.com/article/123
Kasırga> /check
# Kontrol sonrası kazıyıcıyı onayla

[news]> /strategy create --name article --manual
[news] [article]> /fields add -n headline -s "h1.headline"
[news] [article]> /fields add -n author -s "span.author"
[news] [article]> /fields add -n date -s "time" -t attribute -a datetime
[news] [article]> /fields add -n content -s "div.content p" -m
[news] [article]> /scrape --output article.json --json

Toplu İşleme Betiği

#!/bin/bash
# scrape_batch.sh - Birden fazla URL'yi işle

URLS=(
  "https://example.com/page1"
  "https://example.com/page2"
  "https://example.com/page3"
)

# Önce, tüm kazıyıcıları oluştur ve kontrol et
for i in "${!URLS[@]}"; do
  url="${URLS[$i]}"
  code="batch_$i"
  
  kasirga scraper create --code "$code" --url "$url"
  kasirga check --code "$code" <<< "Y"  # Otomatik onayla
done

# Sonra hepsini kazı
for i in "${!URLS[@]}"; do
  code="batch_$i"
  
  kasirga scraper select "$code"
  kasirga strategy create --name extract --manual
  kasirga fields add -n title -s "h1"
  kasirga fields add -n content -s "main" 
  kasirga scrape --output "page_$i.json" --json
done

En İyi Uygulamalar

1. Kazımadan Önce Her Zaman Kontrol Edin

Kontrol komutu, doğru kazıma yöntemini sağlamak için zorunludur:

kasirga check --code mysite

2. CSS Seçicileri Bulma

  • Tarayıcı DevTools'u kullanın (F12) → Öğeyi İncele
  • Öğeye sağ tıklayın → Kopyala → Seçiciyi kopyala
  • Tarayıcı konsolunda test edin: document.querySelectorAll('your-selector')

3. Dinamik İçeriği Yönetme

  • SPA'lar için, kontrol komutunun JavaScript gereksinimlerini algılamasına her zaman izin verin
  • Sonsuz kaydırma için, makul kaydırma limitleriyle başlayın (10-20)
  • Her kaydırmada kaç öğe yüklendiğini görmek için logları izleyin

4. Sonsuz Kaydırmayı Optimize Etme

# Her kaydırmada kaç öğe yüklendiğini kontrol et
kasirga scrape --max-scrolls 5
# Daha fazla öğeye ihtiyacın varsa, kademeli olarak artır
kasirga scrape --max-scrolls 15

5. Seçici İpuçları

  • Genel etiketler yerine ID'leri ve benzersiz sınıfları tercih edin
  • Esneklik için öznitelik seçicileri kullanın: [data-testid="price"]
  • Hassasiyet için seçicileri birleştirin: div.product > span.price

6. Performans

  • Benzer sayfalar için kazıyıcıları ve stratejileri yeniden kullanın
  • Gereksiz yüklemeyi önlemek için uygun max-scrolls değerini ayarlayın
  • Yalnızca gerekli veriyi çıkarmak için alan filtreleme kullanın
  • Detay kazıma için çoklu iş parçacığı kullanın: --threads 8

7. Kazıyıcıları Yönetme

  • Yedekleme için kazıyıcıları dışa aktarın: kasirga scraper export -o backup.json
  • İçe/dışa aktarma ile projeler arasında kazıyıcıları paylaşın
  • Genel bakış ve istatistikleri görmek için kasirga scraper status kullanın

Veri Depolama

Kasırga tüm yapılandırmaları ~/.kasirga/ dizininde saklar:

  • scrapers/ - Kazıyıcı tanımları ve ayarları
  • strategies/ - Çıkarma stratejileri ve alanları
  • history - Etkileşimli mod için komut geçmişi

Sorun Giderme

"Kazıyıcı onaylanmadı" Hatası

Önce kontrol komutunu çalıştırın:

kasirga check --code yourcode

Sonsuz Kaydırma Yeterince İçerik Yüklemiyor

Maksimum kaydırma sayısını artırın:

kasirga scrape --max-scrolls 30
# Veya kazıyıcı varsayılanını güncelle:
kasirga scraper update yourcode --max-scrolls 30

Playwright Kurulum Sorunları

# Playwright tarayıcılarını yeniden kur
playwright install chromium
# Veya tüm tarayıcıları kur
playwright install

İçerik Çıkarılmadı

  1. Seçicileri tarayıcı DevTools'unda doğrulayın
  2. Sitenin JavaScript gerektirip gerektirmediğini kontrol edin (kontrol komutunu çalıştırın)
  3. SPA'lar için, kontrolün bunu doğru algıladığından emin olun
  4. Daha spesifik seçiciler deneyin

Lisans

MIT Lisansı - detaylar için LICENSE dosyasına bakın

About

T3 AILE için geliştirilmiş olan, python tabanlı, açık kaynak kodlu, standart ve interaktif mod olmak üzere iki adet terminal kullanım arayüzü sunan, web scrapper aracıdır.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages