crawl4ai

Web Scraping & CrawlingCLIPython

★ 82,988주당 +693조회 4

무엇인가

Crawl4AI는 페이지 수집과 LLM 입력 생성을 한 프로세스로 합친 크롤링 라이브러리다. HTTP 요청으로 HTML을 받아 파서로 본문을 뽑고 다시 Markdown으로 직렬화하는 조합을 대체하는 자리에 놓인다. 출력 단위가 원시 HTML이나 아이템 목록이 아니라 Markdown 문서와 JSON 레코드라는 점이 이 계열 안에서의 위치를 정한다.

어떻게 동작하나

중심은 `AsyncWebCrawler`다. `arun()`은 단일 URL, `arun_many()`는 URL 목록을 받아 Playwright 기반 브라우저 풀에서 렌더링하고, `BrowserConfig`와 `CrawlerRunConfig`가 브라우저·세션·프록시·쿠키·훅을 지정한다. 수집한 DOM은 `DefaultMarkdownGenerator`를 거치며, `PruningContentFilter`나 `BM25ContentFilter`가 노이즈를 제거해 `fit_markdown`을 만든다. 링크는 번호가 붙은 참조 목록으로 변환된다. 구조화 추출은 `JsonCssExtractionStrategy`가 XPath·CSS 선택자로, `LLMExtractionStrategy`가 청킹과 코사인 유사도 기반 청크 선택으로 처리한다. 대량 실행은 `MemoryAdaptiveDispatcher`·`SemaphoreDispatcher`가 동시성을 조절하고, 딥 크롤은 `resume_state`와 `on_state_change` 콜백으로 중단 지점부터 재개한다.

무엇과 다른가

Scrapy가 스파이더와 규칙 기반 파이프라인을 중심에 두고 브라우저 렌더링을 별도 미들웨어로 붙이는 반면, 여기서는 단일 URL 호출이 기본 단위이고 렌더링이 기본 경로다. 호스팅 스크래핑 API와 달리 계정·API 키·호출 과금 없이 로컬에서 돌고, Docker로 자체 서버를 세울 수 있다. Playwright를 단독으로 쓰는 경우와 비교하면 추출·정제·Markdown 변환 단계가 이미 안에 들어 있다.

어떻게 쓰나

설치는 `pip install crawl4ai`이고, 브라우저 바이너리는 별도 설치 명령으로 받는다. Python에서는 `AsyncWebCrawler().arun(url)` 결과의 `markdown` 속성을 읽는 것이 최소 사용법이다. 같은 기능을 CLI로 호출할 수 있고, Docker 이미지로 API 서버를 띄우면 토큰 인증 아래 HTTP로 크롤을 요청한다.

전제와 한계

Python 실행 환경과 Playwright 브라우저 바이너리가 전제다. LLM 기반 추출은 외부 LLM 제공자 키를 요구한다. 브라우저 렌더링 경로는 정적 HTTP 요청보다 느리고 자원을 더 쓴다. Docker API 서버는 토큰이 없으면 루프백에만 바인딩되며, 요청 본문은 신뢰 경계 밖으로 취급된다. PDF 처리 경로와 Docker Playground에는 임의 파일 쓰기·SSRF·서비스 거부·XSS 권고가 있었고 v0.9.3에서 수정됐다.

유사 도구