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.
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!
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:
- Temiz Markdown Oluşturma: Retrieval-Augmented Generation (RAG) sistemleri ve model ince ayarı için optimize edilmiş, iyi yapılandırılmış, öz Markdown üretmek, fazlalıkları ve gürültüyü ortadan kaldırır.
- Yapılandırılmış Veri Çıkarma: Geleneksel yöntemler (CSS seçiciler, XPath) veya daha karmaşık, anlamsal çıkarma görevleri için LLM'lerden yararlanarak belirli veri noktalarının JSON gibi formatlara çıkarılmasını sağlar.
- Yüksek Performans: Hızlı, eşzamansız tarama için Python'ın
asyncio
kütüphanesini ve güçlü Playwright tarayıcı otomasyon çerçevesini kullanır. - Gelişmiş Tarayıcı Kontrolü: JavaScript yürütme, dinamik içeriği işleme, oturumları yönetme (çerezler, yerel depolama), proxy'ler kullanma ve farklı kullanıcı ortamlarını (kullanıcı aracısı, coğrafi konumlar) simüle etme dahil olmak üzere tarayıcı örneği üzerinde ince ayarlı kontrol sunar.
- Açık Kaynak ve Esneklik: Harici API anahtarlarına veya ücretli hizmetlere bağlı olmadan tamamen açık kaynaklıdır (Apache 2.0, atıf ile). Docker veya doğrudan pip kurulumu yoluyla dağıtım esnekliği sunar.
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ı:
AsyncWebCrawler
: Taramaları başlatmak için ana sınıf.async with
kullanmak, tarayıcının düzgün bir şekilde yönetilmesini sağlar.arun(url, config=None)
: Tek bir URL'yi taramak için temel eşzamansız yöntem.BrowserConfig
: Tarayıcı düzeyindeki ayarları (headless, kullanıcı aracısı, proxy'ler) kontrol eder.AsyncWebCrawler
başlatma sırasında iletilir.CrawlerRunConfig
: Belirli bir tarama işi için ayarları (önbelleğe alma, çıkarma stratejileri, zaman aşımı, JavaScript yürütme) kontrol eder.arun
yöntemine iletilir.CacheMode
: Crawl4AI'nin önbelleğiyle nasıl etkileşimde bulunduğunu belirler (ENABLED
,DISABLED
,BYPASS
).BYPASS
, geliştirme sırasında taze veriler sağlamak için kullanışlıdır.
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:
url
: Taranan son URL (yönlendirmelerden sonra).success
: Taramada başarılı olup olmadığını gösteren Boole değeri.error_message
:success
False
ise hata ayrıntılarını içerir.status_code
: Yanıtın HTTP durum kodu.markdown
: Markdown sürümlerini içeren bir nesne (raw_markdown
,fit_markdown
,word_count
).html
: Sayfanın ham HTML içeriği.text
: Sayfadan çıkarılan düz metin içeriği.extracted_content
: Yapılandırılmış herhangi bir çıkarma stratejisinden (örneğin, JSON dizesi) sonucu depolar.links
: Sayfada bulunan bağlantıların bir listesi (internal
,external
).media
: Çıkarılan medya hakkında bilgi (resimler, tablolar vb.).metadata
: Sayfa meta verileri (başlık, açıklama vb.).cookies
: Tarayıcı çerezleri taramadan sonra.screenshot_path
: Çekilen ekran görüntüsünün yolu.network_log_path
: Yakalanırsa ağ HAR dosyasının yolu.console_log_path
: Yakalanırsa konsol günlüğü dosyasının yolu.
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:
result.markdown.raw_markdown
: Sayfanın birincil içerik alanının doğrudan, filtrelenmemiş Markdown'a dönüştürülmesi.result.markdown.fit_markdown
: Markdown'ın bir filtrelenmiş sürümü. Bu, genellikle LLM'ler için en kullanışlı olanıdır, çünkü Crawl4AI, yaygın web karmaşasını (menüler, reklamlar, altbilgiler, kenar çubukları) kaldırmak için sezgisel filtreler (PruningContentFilter
veyaBM25ContentFilter
gibi) uygular.result.markdown.word_count
:fit_markdown
'ın kelime sayısı.
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:
start_url
: Taramaya başlanacak ilk URL.strategy
: Bağlantıların nasıl keşfedileceği ve önceliklendirileceği (bfs
,dfs
,bestfirst
).max_depth
:start_url
'den maksimum bağlantı mesafesi.max_pages
: Bu işte taranacak maksimum toplam sayfa sayısı.include_patterns
,exclude_patterns
: Hangi URL'lerin izleneceğini filtrelemek için regex desenlerini kullanın.
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:
js_code
: Sayfa bağlamında yürütülecek bir JavaScript dizeleri listesi.wait_for_timeout
: Sayfa yüklemesinden ve JS yürütülmesinden sonra beklenecek milisaniye sayısı.wait_for_selector
: Sayfanın yüklendiğini/etkileşimin tamamlandığını düşünmeden önce beklenecek bir CSS seçicisi.page_interaction_hooks
: Daha karmaşık etkileşimler için daha gelişmiş kancalar.
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.
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!