Crawl4AI 빠른 시작 — 첫 크롤과 추출
Crawl4AI 빠른 시작
처음 크롤을 돌리는 것부터, CSS 기반·LLM 기반 추출까지 한 번에 훑어볼게요. 코드는 전부 asyncio 위에서 돌아가요.
첫 크롤
import asyncio
from crawl4ai import AsyncWebCrawler
async def main():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url="https://example.com")
print(result.markdown)
asyncio.run(main())
AsyncWebCrawler가 기본값인 headless Chromium을 띄우고, 페이지를 가져온 뒤 HTML을 Markdown으로 변환해 줘요.
기본 설정
브라우저 동작은 BrowserConfig, 크롤 실행은 CrawlerRunConfig로 나눠 제어해요.
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
async def main():
browser_conf = BrowserConfig(headless=True) # or False to see the browser
run_conf = CrawlerRunConfig(cache_mode=CacheMode.BYPASS)
async with AsyncWebCrawler(config=browser_conf) as crawler:
result = await crawler.arun(url="https://example.com", config=run_conf)
print(result.markdown)
if __name__ == "__main__":
asyncio.run(main())
주의할 점이 하나 있어요. 기본 캐시 모드는 CacheMode.BYPASS라 항상 새 콘텐츠를 가져와요. 캐싱을 쓰고 싶다면 CacheMode.ENABLED로 바꿔야 해요.
CSS 기반 구조화 추출
반복되는 페이지 구조(상품 목록, 기사 등)는 CSS 선택자로 JSON을 뽑는 JsonCssExtractionStrategy가 빠르고 공짜예요. LLM이 스키마를 자동 생성해 주는 generate_schema() 유틸리티도 있어요. raw HTML을 넘기고 싶다면 URL 대신 raw:// 접두사를 써요.
LLM 기반 추출
불규칙한 페이지는 LLM이 자연어를 스키마에 맞춰 파싱해요. 오픈소스 모델(ollama/llama3.3, no_token)이나 OpenAI(openai/gpt-4, api_token 필요) 등 다양한 프로바이더를 지원해요.
import os, json, asyncio
from pydantic import BaseModel, Field
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, LLMConfig, LLMExtractionStrategy
class OpenAIModelFee(BaseModel):
model_name: str = Field(..., description="Name of the model")
strategy = LLMExtractionStrategy(
llm_config=LLMConfig(provider=provider, api_token=api_token),
schema=OpenAIModelFee.model_json_schema(),
extraction_type="schema",
instruction="Extract all mentioned model names along with their fees.",
extra_args=extra_args,
)
LLM 추출은 Pydantic 스키마 + 지시문을 바탕으로 원시 텍스트를 구조화된 JSON으로 바꿔요.
멀티 URL 병렬
여러 URL을 병렬로 크롤하려면 arun_many()을 써요. 기본값으로 MemoryAdaptiveDispatcher가 시스템 리소스에 맞춰 동시성을 자동 조절해요.