Crawl4AI Eğitimi: Yeni Başlayanlar İçin Bir Rehber

AI çağında web verilerine erişim ve işleme kritik. Crawl4AI, LLM'ler, yapay zeka ve modern veri hatları için geliştirilmiş güçlü bir açık kaynaklı web tarayıcısıdır.

Efe Demir

Efe Demir

5 June 2025

Crawl4AI Eğitimi: Yeni Başlayanlar İçin Bir Rehber

Yapay Zeka çağında, web verilerine verimli bir şekilde erişmek ve işlemek çok önemlidir. Crawl4AI, Büyük Dil Modelleri (LLM'ler), yapay zeka aracıları ve modern veri hatları ile çalışan geliştiriciler için titizlikle tasarlanmış, güçlü, açık kaynaklı bir web tarayıcısı ve kazıyıcısı olarak ortaya çıkıyor. Bu eğitim, kurulumdan gelişmiş tarama tekniklerine kadar her şeyi kapsayan Crawl4AI'ye derinlemesine bir dalış sunmaktadır.

💡
Harika bir API Dokümantasyonu üreten harika bir API Test aracı mı istiyorsunuz? Güzel API Dokümantasyonu?

Geliştirici Ekibinizin maksimum verimlilikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?

Apidog tüm taleplerinizi karşılıyor ve Postman'in yerini çok daha uygun bir fiyata alıyor!
button

Projeleriniz için Neden Crawl4AI'yi Seçmelisiniz?

Crawl4AI, standart bir web kazıyıcısından daha fazlasıdır. LLM dostu olacak şekilde sıfırdan tasarlanmıştır. Bu, şunlara odaklandığı anlamına gelir:

Crawl4AI, veri erişimini demokratikleştirmeyi, geliştiricilerin web verilerini hız ve verimlilikle toplamalarını ve şekillendirmelerini amaçlamaktadır.


Crawl4AI'yi Kurma ve Ayarlama

Crawl4AI'yi çalıştırmak basittir ve hem pip hem de Docker seçenekleri sunar.

Yöntem 1: Pip Kurulumu (Kütüphane Kullanımı İçin Önerilir)

Paketi Yükleyin: Terminalinizi açın ve çalıştırın:

# En son kararlı sürümü yükleyin
pip install -U crawl4ai

# Veya, en son ön sürümü yükleyin (en son özellikler için)
# pip install crawl4ai --pre

Kurulum Sonrası Kurulumu Çalıştırın: Bu önemli adım, gerekli Playwright tarayıcı ikililerini (varsayılan olarak Chromium) yükler:

crawl4ai-setup

Doğrulayın: Tanılama aracını kullanarak kurulumunuzu kontrol edin:

crawl4ai-doctor

Sorun Giderme: crawl4ai-setup sorunlarla karşılaşırsa, tarayıcı bağımlılıklarını manuel olarak yükleyin:

python -m playwright install --with-deps chromium

Yöntem 2: Docker Dağıtımı (API Hizmeti İçin İdeal)

Görüntüyü Çekin: Resmi Docker görüntüsünü edinin (en son etiket için GitHub'ı kontrol edin):

# Örnek etiket, gerekirse değiştirin
docker pull unclecode/crawl4ai:latest

Konteyneri Çalıştırın: Crawl4AI hizmetini başlatın, API'sini (varsayılan bağlantı noktası 11235) kullanıma açın:

docker run -d -p 11235:11235 --name crawl4ai --shm-size=1g unclecode/crawl4ai:latest

Bu, Crawl4AI'yi bir FastAPI arka ucu ile çalıştırır ve HTTP aracılığıyla tarama isteklerini kabul etmeye hazırdır. http://localhost:11235/playground adresinde etkileşimli bir API oyun alanına erişebilirsiniz.


Crawl4AI ile İlk Taramayı Nasıl Yürütürsünüz?

Crawl4AI, AsyncWebCrawler kullanarak temel taramayı inanılmaz derecede basit hale getirir.

import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode

async def run_basic_crawl():
    # --- Temel Örnek ---
    print("--- Temel Tarama Çalıştırılıyor ---")
    # Otomatik tarayıcı başlatma ve kapatma için 'async with' kullanın
    async with AsyncWebCrawler() as crawler:
        # arun() yöntemi, tek bir URL için taramayı gerçekleştirir
        # Bir CrawlResult nesnesi döndürür
        result = await crawler.arun(url="https://example.com")

        if result and result.success:
            # Oluşturulan Markdown'a erişin (genellikle 'fit_markdown')
            print("Tarama Başarılı!")
            # result.markdown hem ham hem de filtrelenmiş markdown sağlar
            print(f"Fit Markdown (ilk 300 karakter): {result.markdown.fit_markdown[:300]}...")
        else:
            print(f"Tarama Başarısız: {result.error_message}")

    # --- Temel Yapılandırma ile Örnek ---
    print("\n--- Temel Yapılandırma ile Tarama Çalıştırılıyor ---")
    # Tarayıcı davranışını yapılandırın (örneğin, hata ayıklama için headful çalıştırın)
    browser_conf = BrowserConfig(headless=True) # Tarayıcı penceresini görmek için False olarak ayarlayın

    # Çalışmaya özgü ayarları yapılandırın (örneğin, önbelleği atlayın)
    # CacheMode.ENABLED (varsayılan), CacheMode.DISABLED, CacheMode.BYPASS
    run_conf = CrawlerRunConfig(cache_mode=CacheMode.BYPASS)

    async with AsyncWebCrawler(config=browser_conf) as crawler:
        result = await crawler.arun(
            url="https://crawl4ai.com/", # Resmi siteyi tarayın
            config=run_conf # Çalışma yapılandırmasını uygulayın
        )
        if result and result.success:
            print("Tarama Başarılı!")
            print(f"Fit Markdown Kelime Sayısı: {result.markdown.word_count}")
            print(f"Taranan URL: {result.url}")
        else:
            print(f"Tarama Başarısız: {result.error_message}")

if __name__ == "__main__":
    asyncio.run(run_basic_crawl())

Temel Crawl4AI Kavramları:


Crawl4AI CrawlResult Nesnesi Nasıl Çalışır?

Her başarılı arun veya arun_many çağrısı, tarama sırasında toplanan tüm bilgileri kapsayan bir veya daha fazla CrawlResult nesnesi döndürür.

CrawlResult nesnesi çeşitli öznitelikler içerir, bunlar şunlardır:

Bu nesneyi incelemek, bir Crawl4AI taramasından ihtiyacınız olan belirli verilere erişmenin anahtarıdır.


Crawl4AI ile Yapay Zeka Hazır Markdown Nasıl Oluşturulur?

Crawl4AI'nin temel gücü, LLM'ler için uygun temiz Markdown oluşturma yeteneğidir.

result.markdown özniteliği şunları içerir:

Crawl4AI'deki filtreleme işlemini özelleştirebilirsiniz:

import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode
# Özelleştirme için belirli stratejileri içe aktarın
from crawl4ai.content_filter_strategy import PruningContentFilter
from crawl4ai.markdown_generation_strategy import DefaultMarkdownGenerator

async def run_custom_markdown_crawl():
    print("\n--- Özel Markdown Filtreleme ile Tarama Çalıştırılıyor ---")

    # Belirli bir içerik filtresi ile bir Markdown oluşturucu yapılandırın
    # PruningContentFilter, kelime sayısı eşiklerine göre öğeleri kaldırır
    markdown_generator_with_filter = DefaultMarkdownGenerator(
        content_filter=PruningContentFilter(
            threshold=0.48, # Eşik değerini ayarlayın (0 ila 1)
            threshold_type="fixed" # 'fixed' veya 'relative'
            )
    )

    # Bu oluşturucuyu çalışma yapılandırmasında uygulayın
    run_conf = CrawlerRunConfig(
        cache_mode=CacheMode.BYPASS,
        markdown_generator=markdown_generator_with_filter
    )

    async with AsyncWebCrawler() as crawler:
        result = await crawler.arun(
            url="https://www.nbcnews.com/business", # Genellikle karmaşıklığa sahip bir haber sitesi
            config=run_conf
        )
        if result and result.success:
            print("Tarama Başarılı!")
            print(f"Ham Markdown Uzunluğu: {len(result.markdown.raw_markdown)}")
            print(f"Fit Markdown Uzunluğu: {len(result.markdown.fit_markdown)}") # Genellikle daha kısa
            # Filtrenin etkisini görmek için raw_markdown ve fit_markdown'ı karşılaştırın
        else:
            print(f"Tarama Başarısız: {result.error_message}")

if __name__ == "__main__":
    asyncio.run(run_custom_markdown_crawl())

markdown_generator içindeki content_filter'ı ayarlayarak, Crawl4AI'nin fit_markdown üretmeden önce içeriği ne kadar agresif bir şekilde temizlediğini kontrol edersiniz.


Crawl4AI Derin Taraması Nasıl Kullanılır?

Crawl4AI tek sayfalarla sınırlı değildir. Bağlantıları izleyerek bir web sitesinde derinlemesine taramalar gerçekleştirebilir.

adeep_crawl yöntemini (veya crwl CLI'sının --deep-crawl bayrağını) kullanın:

import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, CacheMode

async def run_deep_crawl():
    print("\n--- Derin Tarama Çalıştırılıyor ---")
    # Yapılandırma, her zamanki gibi genel veya çalışma başına uygulanabilir
    run_conf = CrawlerRunConfig(cache_mode=CacheMode.ENABLED)

    async with AsyncWebCrawler() as crawler:
        # adeep_crawl, sayfalar bittiğinde sonuçları veren bir eşzamansız oluşturucu döndürür
        crawl_generator = await crawler.adeep_crawl(
            start_url="https://docs.crawl4ai.com/", # Başlangıç noktası
            strategy="bfs", # 'bfs' (Genişlik Öncelikli), 'dfs' (Derinlik Öncelikli), 'bestfirst'
            max_depth=2,    # Kaç bağlantı derinliğine kadar izleneceğini sınırlayın
            max_pages=10,   # Bu işte taranacak toplam sayfa sayısını sınırlayın
            config=run_conf
        )

        # Sonuçlar geldikçe işleyin
        pages_crawled = 0
        async for result in crawl_generator:
            if result.success:
                print(f"[OK] Taranan: {result.url} (Derinlik: {result.depth}, Fit Markdown Uzunluğu: {len(result.markdown.fit_markdown)})")
                pages_crawled += 1
            else:
                print(f"[FAIL] URL: {result.url}, Hata: {result.error_message}")

        print(f"\nDerin tarama bitti. Başarıyla taranan toplam sayfa sayısı: {pages_crawled}")

if __name__ == "__main__":
    asyncio.run(run_deep_crawl())

Crawl4AI Derin Tarama Parametreleri:


Crawl4AI ile Dinamik İçeriği ve Etkileşimleri Nasıl İşlenir?

Modern web siteleri, içeriği yüklemek için yoğun bir şekilde JavaScript'e güveniyor. Crawl4AI, bunu Playwright'in yetenekleri aracılığıyla halleder.

CrawlerRunConfig kullanarak rastgele JavaScript yürütebilir veya belirli koşulları bekleyebilirsiniz:

import asyncio
import json
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
from crawl4ai.extraction_strategy import JsonCssExtractionStrategy # Örneğin

async def crawl_dynamic_page():
    print("\n--- JS Etkileşimi ile Dinamik Sayfa Taranıyor ---")

    # CSS çıkarma için örnek şema (hedef siteye uyarlayın)
    schema = { "items": { "selector": "div.product-item", "type": "list", "fields": { "title": "h2", "price": ".price" } } }
    css_extractor = JsonCssExtractionStrategy(schema)

    # Sayfada yürütülecek JavaScript (örneğin, bir 'Daha Fazla Yükle' düğmesine tıklayın)
    # Not: Seçici, hedef web sitesiyle eşleşmelidir
    js_to_run = """
    (async () => {
        const loadMoreButton = document.querySelector('button#load-more');
        if (loadMoreButton) {
            console.log('Daha fazla yükle düğmesine tıklanıyor...');
            loadMoreButton.click();
            // Tıklamadan sonra içeriğin potansiyel olarak yüklenmesi için biraz bekleyin
            await new Promise(resolve => setTimeout(resolve, 2000));
            console.log('Tıklamadan sonra beklendi.');
        } else {
            console.log('Daha fazla yükle düğmesi bulunamadı.');
        }
    })();
    """

    run_conf = CrawlerRunConfig(
        cache_mode=CacheMode.BYPASS,
        js_code=[js_to_run], # Yürütülecek JS parçacıklarının listesi
        wait_for_timeout=3000, # İlk yüklemeden VE JS yürütülmesinden sonra 3 saniye bekleyin
        # wait_for_selector="div.newly-loaded-content", # Veya belirli bir öğeyi bekleyin
        extraction_strategy=css_extractor, # JS çalıştıktan sonra verileri çıkarın
        output_formats=['markdown', 'extracted_content']
    )

    # JS'nin BrowserConfig'de etkin olduğundan emin olun (varsayılan olarak öyledir)
    browser_conf = BrowserConfig(headless=True, java_script_enabled=True)

    async with AsyncWebCrawler(config=browser_conf) as crawler:
        result = await crawler.arun(
            url="BURAYA_DINAMIK_SAYFANIN_URL'SI", # Gerçek URL ile değiştirin
            config=run_conf
        )

        if result and result.success:
            print("Dinamik sayfa taraması başarılı!")
            print(f"Fit Markdown Uzunluğu: {len(result.markdown.fit_markdown)}")
            if result.extracted_content:
                try:
                    extracted_data = json.loads(result.extracted_content)
                    print(f"Çıkarılan İçerik Önizlemesi: {json.dumps(extracted_data, indent=2)[:500]}...")
                except json.JSONDecodeError:
                    print(f"Çıkarılan İçerik (JSON olmayan): {result.extracted_content[:500]}...")
        else:
            print(f"Tarama Başarısız: {result.error_message}")


if __name__ == "__main__":
    # Test için içeriği dinamik olarak yükleyen gerçek bir URL ile değiştirin
    # asyncio.run(crawl_dynamic_page())
    print("Lütfen 'BURAYA_DINAMIK_SAYFANIN_URL'SI'ni değiştirin ve dinamik örneği çalıştırmak için yukarıdaki satırın yorumunu kaldırın.")

CrawlerRunConfig içindeki Temel Crawl4AI Etkileşim Parametreleri:


Crawl4AI Sonuç

Crawl4AI, web tarama ve kazıma için kapsamlı, Pythonic ve yapay zeka odaklı bir çözüm sunar. Temiz Markdown oluşturmaya, esnek yapılandırılmış veri çıkarmaya (hem CSS hem de LLM tabanlı), dinamik içeriğin sağlam bir şekilde işlenmesine ve verimli eşzamansız çalışmaya odaklanması, onu RAG, LLM ince ayarı veya web'den yapılandırılmış bilgi gerektiren herhangi bir proje için mükemmel bir seçim haline getirir. Açık API'sini, yapılandırma seçeneklerini (BrowserConfig, CrawlerRunConfig) ve ayrıntılı CrawlResult nesnesini kullanarak, geliştiriciler gelişmiş ve verimli veri toplama iş akışları oluşturabilirler.

💡
Harika bir API Dokümantasyonu üreten harika bir API Test aracı mı istiyorsunuz? Güzel API Dokümantasyonu?

Geliştirici Ekibinizin maksimum verimlilikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?

Apidog tüm taleplerinizi karşılıyor ve Postman'in yerini çok daha uygun bir fiyata alıyor!
button

Explore more

Fathom-R1-14B: Hindistan'dan Gelişmiş Yapay Zeka Muhakeme Modeli

Fathom-R1-14B: Hindistan'dan Gelişmiş Yapay Zeka Muhakeme Modeli

Yapay zeka hızla gelişiyor. FractalAIResearch/Fathom-R1-14B, 14.8 milyar parametreyle matematik ve genel akıl yürütmede başarılı.

5 June 2025

Mistral Code: İşletmeler için En Özelleştirilebilir Yapay Zeka Destekli Kodlama Asistanı

Mistral Code: İşletmeler için En Özelleştirilebilir Yapay Zeka Destekli Kodlama Asistanı

Mistral Code'u keşfedin: Kurumsal kullanıma özel, en özelleştirilebilir yapay zeka destekli kodlama asistanı.

5 June 2025

Claude Code'un 2025'te Yapay Zeka Kodlamasını Nasıl Dönüştürdüğü

Claude Code'un 2025'te Yapay Zeka Kodlamasını Nasıl Dönüştürdüğü

Claude Code, 2025'te yapay zeka destekli kodlamayı nasıl devrimleştiriyor? Özelliklerini, kullanımını ve Windsurf kısıtlamalarından sonra neden popüler olduğunu öğrenin. Geliştiriciler için okunması gereken!

5 June 2025

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin