Crawl4AI: Web Crawling yang Dioptimalkan untuk Pipeline AI
Dalam membangun aplikasi AI modern, terutama yang berbasis Retrieval-Augmented Generation (RAG), salah satu tantangan terbesar adalah mendapatkan data berkualitas tinggi dari web. Kebanyakan web scraper tradisional menghasilkan HTML mentah yang berantakan dan sulit diproses oleh LLM.
Crawl4AI hadir sebagai solusi open-source yang dirancang khusus untuk kebutuhan AI. Crawl4AI menghasilkan output berupa clean markdown dan structured data yang siap digunakan langsung dalam pipeline AI Anda.Apa Itu Crawl4AI?
Crawl4AI adalah library Python open-source untuk web crawling yang dioptimalkan untuk AI dan data pipeline. Fitur utamanya meliputi:
- Output Clean Markdown: Otomatis mengkonversi halaman web menjadi markdown bersih
- Async Crawling: Dukungan asynchronous untuk crawling paralel yang cepat
- LLM-Based Extraction: Ekstraksi data terstruktur menggunakan LLM
- CSS-Based Extraction: Ekstraksi data menggunakan CSS selector tanpa LLM
- JavaScript Rendering: Menangani halaman yang di-render oleh JavaScript
- Chunking Strategies: Berbagai strategi untuk memecah konten menjadi chunk yang optimal
- Session Management: Mengelola cookies dan session untuk crawling yang kompleks
Instalasi
Instalasi Dasar
pip install crawl4ai
Setup Browser (Playwright)
Crawl4AI menggunakan Playwright untuk rendering halaman web. Setelah instalasi, jalankan setup browser:
# Install browser Chromium
crawl4ai-setup
Atau manual via playwright
playwright install chromium
Instalasi dengan Dependensi Lengkap
# Dengan dukungan semua fitur
pip install "crawl4ai[all]"
Verifikasi Instalasi
import crawl4ai
print(f"Crawl4AI version: {crawl4ai.version}")
Basic Crawling
Crawling Halaman Sederhana
import asyncio
from crawl4ai import AsyncWebCrawler
async def basiccrawl():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url="https://example.com")
# Status crawling
print(f"Status: {result.success}")
print(f"Status Code: {result.statuscode}")
# Konten dalam markdown
print(f"Markdown length: {len(result.markdown)}")
print(result.markdown[:500])
# Clean markdown (tanpa navigasi, footer, dll.)
print(f"\nClean markdown length: {len(result.cleanedhtml)}")
Jalankan
asyncio.run(basiccrawl())
Menggunakan Fit Markdown
Crawl4AI menyediakan fitmarkdown yang merupakan versi markdown yang sudah difilter dari elemen-elemen tidak penting:
async def crawlwithfitmarkdown():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url="https://docs.python.org/3/tutorial/")
# Markdown mentah - termasuk navigasi, sidebar, dll.
print(f"Raw markdown: {len(result.markdown)} chars")
# Fit markdown - hanya konten utama
print(f"Fit markdown: {len(result.fitmarkdown)} chars")
# Gunakan fitmarkdown untuk input ke LLM
print(result.fitmarkdown[:500])
asyncio.run(crawlwithfitmarkdown())
Konfigurasi Crawler
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, BrowserConfig
async def configuredcrawl():
# Konfigurasi browser
browserconfig = BrowserConfig(
headless=True,
browsertype="chromium",
verbose=True
)
# Konfigurasi crawling
runconfig = CrawlerRunConfig(
wordcountthreshold=10, # Minimum kata per blok
excludeexternallinks=True, # Abaikan link eksternal
removeoverlayelements=True, # Hapus popup/overlay
processiframes=False # Abaikan iframes
)
async with AsyncWebCrawler(config=browserconfig) as crawler:
result = await crawler.arun(