Open-source 웹 크롤러 Crawl4AI로 LLM 친화적 마크다운 생성하기
unclecode/crawl4ai를 사용하여 웹사이트 내용을 LLM이 이해하기 쉬운 깔끔한 마크다운으로 변환하는 방법을 안내합니다. AI 에이전트 학습 데이터 구축에 유용합니다. 출처: https://github.com/unclecode/crawl4ai
Crawl4AI: 웹 데이터를 LLM을 위한 마크다운으로
Crawl4AI는 오픈소스 웹 크롤러 및 스크래퍼로, 어떤 웹사이트든 LLM과 AI 에이전트가 쉽게 처리할 수 있는 깨끗한 마크다운 형식으로 변환하는 데 특화되어 있습니다. 불필요한 메뉴, 푸터 등을 제거하고 제목, 목록, 표, 코드 블록 등 구조화된 콘텐츠만 추출하여 AI 학습 데이터 생성에 매우 유용합니다.
주요 기능
- 깨끗한 마크다운 생성: LLM이 잘 이해할 수 있는 구조로 콘텐츠를 변환합니다.
- 콘텐츠 필터링:
PruningContentFilterLXML,BM25ContentFilter,LLMContentFilter등을 사용하여 불필요한 요소를 제거합니다. - 페이지 링크를 인용으로: 웹페이지 내 링크를 번호 매기기 참조 목록으로 변환합니다.
- 구조화된 데이터 추출: CSS, XPath, 정규식 또는 LLM을 사용하여 데이터를 추출합니다.
- 브라우저 제어: 로그인, 쿠키, 설정 등을 유지하는 영구 프로필을 사용하거나 원격 브라우저에 연결합니다.
enable_stealth옵션으로 자동화 탐지를 우회할 수 있습니다. - 심층 크롤링: BFS, DFS, best-first 등 다양한 전략으로 웹사이트를 탐색하며,
resume_state로 중단된 크롤링을 이어갈 수 있습니다.
설치 및 기본 사용법
Crawl4AI를 로컬 환경에 설치하려면 Python 환경이 필요합니다. pip를 사용하여 쉽게 설치할 수 있습니다.
pip install crawl4ai
가장 기본적인 사용법은 웹사이트 URL을 입력하여 마크다운으로 변환하는 것입니다. --output 옵션으로 파일 경로를 지정하거나, 지정하지 않으면 표준 출력으로 결과가 나옵니다.
crawl4ai --url https://example.com
이 명령은 https://example.com 페이지의 주요 콘텐츠를 추출하여 LLM이 이해하기 쉬운 마크다운 형식으로 변환합니다. 헤더, 본문 텍스트, 목록 등이 포함되며, 메뉴나 광고와 같은 불필요한 부분은 자동으로 제거됩니다.
활용 사례
상황 1: 특정 기술 블로그의 최신 글 목록을 AI 에이전트에게 학습시키고 싶을 때
- 문제: 기술 블로그에서 제공하는 RSS 피드나 API가 없어, 최신 글 제목과 요약을 수동으로 모으기 어렵습니다.
- 사용 단계:
crawl4ai명령어를 사용하여 블로그 메인 페이지를 크롤링하고,BM25ContentFilter와LLMContentFilter를 조합하여 실제 글 내용이 담긴 섹션만 정확하게 추출합니다. 특히,BM25ContentFilter에 "기술 블로그", "튜토리얼", "소개" 등과 같은 검색어를 제공하여 관련성 높은 콘텐츠를 우선적으로 필터링하도록 합니다.
crawl4ai --url https://example-tech-blog.com --filters BM25ContentFilter --query "기술 블로그 튜토리얼 소개" --output blog_posts.md
* **결과**: `blog_posts.md` 파일에는 해당 블로그의 핵심 게시글 내용만 깔끔하게 정리된 마크다운이 저장됩니다. AI 에이전트는 이 데이터를 기반으로 최신 기술 동향을 파악하거나 관련 정보를 요약하는 능력을 향상시킬 수 있습니다.
**상황 2: 웹사이트의 특정 섹션에 대한 FAQ를 추출하여 지식 베이스를 구축하고 싶을 때**
* **문제**: 고객 지원 웹사이트에서 특정 제품 관련 FAQ 섹션의 질문과 답변을 AI 챗봇 학습용으로 추출해야 하는데, 페이지 구조가 복잡하여 원하는 정보만 선별하기 어렵습니다.
* **사용 단계**: `crawl4ai`의 `--extract` 옵션과 CSS 선택자를 사용하여 FAQ 섹션의 질문과 답변을 구조적으로 추출합니다. `JsonCssExtractionStrategy`를 활용하여 질문(`h3` 태그)과 답변(`p` 태그)을 쌍으로 매핑하는 JSON 스키마를 정의할 수 있습니다.
```bash
crawl4ai --url https://example-support.com/faq --extract "[{'question': 'h3.faq-question', 'answer': 'p.faq-answer'}]" --output faq_data.json
- 결과:
faq_data.json파일에는 FAQ 질문과 답변이 구조화된 JSON 형식으로 저장됩니다. 이 데이터를 사용하여 AI 챗봇이 사용자의 질문에 더 정확하고 관련성 높게 답변하도록 학습시킬 수 있습니다.