GitHub - unclecode/crawl4ai: ๐๐ค Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper. Don't be shy, join here: https://discord.gg/jP8KfhDhyN
ํต์ฌ ํฌ์ธํธ
- 1Crawl4AI๋ ์น ์ฝํ ์ธ ๋ฅผ RAG, ์์ด์ ํธ ๋ฐ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ต์ ํ๋ LLM ์นํ์ ์ธ Markdown ํ์์ผ๋ก ๋ณํํ๋ ์คํ์์ค ์น ํฌ๋กค๋ฌ ๋ฐ ์คํฌ๋ ์ดํผ์ ๋๋ค.
- 2์ด ํ๋ซํผ์ ๋น๋๊ธฐ ๋ธ๋ผ์ฐ์ ํ ๊ธฐ๋ฐ์ ๋น ๋ฅธ ์๋, ์ธ์ ๋ฐ ํ๋ก์ ์ ์ด, ์ ์ํ ์ง๋ฅ๊ณผ ๊ฐ์ ๊ฐ์ ์ ํตํด ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ๋์ ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์์ต๋๋ค.
- 3์ต๊ทผ ์ ๋ฐ์ดํธ๋ฅผ ํตํด ๋ฅ ํฌ๋กค๋ง Crash Recovery, Prefetch Mode, ์ง๋ฅํ LLM ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ถ์ถ, ์ค์๊ฐ ๋ชจ๋ํฐ๋ง Dashboard ๋ฑ ๋ค์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํฉ๋๋ค.
Crawl4AI๋ LLM(Large Language Model) ์นํ์ ์ธ ์คํ์์ค ์น ํฌ๋กค๋ฌ์ด์ ์คํฌ๋ํผ๋ก, ์น ์ฝํ ์ธ ๋ฅผ RAG(Retrieval Augmented Generation), ์์ด์ ํธ, ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ฆ์ ํ์ฉํ ์ ์๋ ๊นจ๋ํ๊ณ ๊ตฌ์กฐํ๋ Markdown ํ์์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋น์ฉ ํจ์จ์ฑ๊ณผ ์ ๊ทผ์ฑ์ ์ค์ ์ ๋๊ณ ์์ผ๋ฉฐ, ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๊ณผ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ฌ ๋ค์ํ ์น ๋ฐ์ดํฐ ์ถ์ถ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํฉ๋๋ค.
ํต์ฌ ๋ฐฉ๋ฒ๋ก ๋ฐ ๊ธฐ์ ์ ํน์ง:
- LLM ์นํ์ Markdown ์์ฑ:
- Heuristic-based Filtering (Fit Markdown): ์น ํ์ด์ง์์ ๋ ธ์ด์ฆ์ ๊ด๋ จ ์๋ ๋ถ๋ถ์ ์ ๊ฑฐํ๊ธฐ ์ํ ํด๋ฆฌ์คํฑ ๊ธฐ๋ฐ ํํฐ๋ง์ ์ฌ์ฉํ์ฌ, AI๊ฐ ์ฒ๋ฆฌํ๊ธฐ์ ์ ํฉํ(fit) Markdown์ ์์ฑํฉ๋๋ค.
- BM25 Algorithm: ํต์ฌ ์ ๋ณด๋ฅผ ์ถ์ถํ๊ณ ๊ด๋ จ ์๋ ์ฝํ ์ธ ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด BM25 ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ ํํฐ๋ง์ ์ ์ฉํฉ๋๋ค. ์ด๋ ๊ฒ์ ๊ด๋ จ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ฝํ ์ธ ์ค์๋๋ฅผ ํ๋จํ๋ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค.
- Citations and References: ํ์ด์ง ๋ด ๋งํฌ๋ฅผ ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง ์ฐธ์กฐ ๋ชฉ๋ก๊ณผ ๊นจ๋ํ ์ธ์ฉ๋ฌธ์ผ๋ก ๋ณํํ์ฌ Markdown์ ํฌํจ์ํต๋๋ค.
- Custom Strategies: ์ฌ์ฉ์๊ฐ ํน์ ์๊ตฌ์ฌํญ์ ๋ง์ถฐ ์์ ๋ง์ Markdown ์์ฑ ์ ๋ต์ ์ ์ํ ์ ์์ต๋๋ค.
- ์ ํ ๋ฐ์ดํฐ ์ถ์ถ:
- LLM-Driven Extraction: ๋ชจ๋ LLM(์คํ์์ค ๋ฐ ์์ฉ)์ ํ์ฉํ์ฌ ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํฉ๋๋ค. ์ด๋ LLM์ ํน์ ์ถ์ถ ์ง์์ ์คํค๋ง๋ฅผ ์ ๊ณตํ์ฌ ์น ์ฝํ ์ธ ์์ ์ํ๋ JSON ๋๋ ๊ธฐํ ๊ตฌ์กฐํ๋ ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์๋ด๋ ๋ฐฉ์์ ๋๋ค.
- Chunking Strategies: ๊ธด ์ฝํ ์ธ ๋ฅผ LLM์ด ์ฒ๋ฆฌํ๊ธฐ ์ฉ์ดํ๋๋ก ํ ํฝ ๊ธฐ๋ฐ(topic-based), ์ ๊ท์(regex), ๋ฌธ์ฅ ๋จ์(sentence-level) ๋ฑ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฒญํฌ(chunk) ์ฒ๋ฆฌํฉ๋๋ค.
- Cosine Similarity: ์ฌ์ฉ์ ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ด๋ จ์ฑ ๋์ ์ฝํ ์ธ ์ฒญํฌ๋ฅผ ์ฐพ์ ์๋ฏธ๋ก ์ (semantic) ์ถ์ถ์ ์ํํฉ๋๋ค. ์ด๋ ํ ์คํธ ์๋ฒ ๋ฉ ๊ฐ์ ์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ์ธก์ ํ์ฌ ์ฟผ๋ฆฌ์ ๋ด์ฉ์ด ๋น์ทํ ๋ถ๋ถ์ ์๋ณํ๋ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค.
- CSS-Based Extraction: XPath ๋ฐ CSS Selector๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์คํค๋ง ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ถ์ถ์ ์ง์ํฉ๋๋ค.
- LLMTableExtraction (v0.7.4): ๋๊ท๋ชจ ํ
์ด๋ธ์ ์ง๋ฅ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฒญํน(chunking), ์ฒ๋ฆฌ, ๋ณํฉ ๊ธฐ๋ฅ์ ํฌํจํ๋ ํ์ ์ ์ธ ํ
์ด๋ธ ์ถ์ถ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
enable_chunking๊ณผchunk_token_threshold,overlap_threshold๋ฅผ ํตํด ๋์ฉ๋ ํ ์ด๋ธ๋ ํจ์จ์ ์ผ๋ก ์ถ์ถํ๊ณ ๊ตฌ์กฐํ๋ ํํ๋ก ๋ณํํ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ํตํฉ ๋ฐ ์ ์ด:
- Async/Await (Playwright ๊ธฐ๋ฐ): ๋น๋๊ธฐ Python
asyncio๋ฅผ ํ์ฉํ๋ฉฐ, ์น ์๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Playwright๋ฅผ ํตํด ์ค์ ๋ธ๋ผ์ฐ์ (Chromium, Firefox, WebKit)๋ฅผ ์ ์ดํฉ๋๋ค. ์ด๋ฅผ ํตํด JavaScript ์คํ, ๋์ ์ฝํ ์ธ ๋ก๋ฉ, CAPTCHA ํํผ ๋ฑ ์ค์ ์ฌ์ฉ์ ํ๊ฒฝ๊ณผ ์ ์ฌํ ํฌ๋กค๋ง์ด ๊ฐ๋ฅํฉ๋๋ค. - Remote Browser Control (CDP): Chrome Developer Tools Protocol (CDP)์ ํ์ฉํ์ฌ ์๊ฒฉ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ดํ๊ณ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ถ์ถ์ ์ํํฉ๋๋ค.
- Browser Profiler & Session Management: ์ฌ์ฉ์ ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ(user data directory)๋ฅผ ํตํด ์๊ตฌ์ ์ธ ํ๋กํ์ ์์ฑํ๊ณ ์ธ์ฆ ์ํ, ์ฟ ํค, ์ค์ ์ ์ ์ฅํ์ฌ ์ธ์
๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
use_persistent_context๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์ธ์ ์ํ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค. - Dynamic Viewport Adjustment: ํ์ด์ง ์ฝํ ์ธ ์ ๋ง์ถฐ ๋ธ๋ผ์ฐ์ ๋ทฐํฌํธ๋ฅผ ์๋์ผ๋ก ์กฐ์ ํ์ฌ ๋ชจ๋ ์์๊ฐ ๋ ๋๋ง๋๊ณ ์บก์ฒ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
- Stealth Mode (v0.7.3):
undetected๋ธ๋ผ์ฐ์ ํ์ ์ ์ง์ํ์ฌ ๋ด ๊ฐ์ง๋ฅผ ํํผํฉ๋๋ค. ์ด๋ ์ค์ ์ ํตํด Cloudflare, Akamai ๋ฑ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๋ด ๊ฐ์ง ์์คํ ์ ์ฐํํฉ๋๋ค.
- Async/Await (Playwright ๊ธฐ๋ฐ): ๋น๋๊ธฐ Python
- ํฌ๋กค๋ง ๋ฐ ์คํฌ๋ํ ๊ธฐ๋ฅ:
- Dynamic Crawling: ์น ํ์ด์ง์ JavaScript๋ฅผ ์คํํ๊ณ ๋น๋๊ธฐ/๋๊ธฐ ๋ก๋ฉ์ ๊ธฐ๋ค๋ ค ๋์ ์ฝํ
์ธ ๋ฅผ ์ถ์ถํฉ๋๋ค.
js_code์ธ์๋ฅผ ํตํด ์ฌ์ฉ์ ์ ์ JavaScript ์ฝ๋๋ฅผ ํ์ด์ง์์ ์คํํ ์ ์์ต๋๋ค. - Customizable Hooks: ํฌ๋กค๋ง ํ๋ก์ธ์ค์ ๊ฐ ๋จ๊ณ(์:
on_page_context_created,before_goto)์ ์ฌ์ฉ์ ์ ์ Python ํจ์ ๊ธฐ๋ฐ์ ํ (hook)์ ์ ์ํ์ฌ ๋์์ ๋ฏธ์ธํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค. ์ด๋ ํฌ๋กค๋ง ํ์ดํ๋ผ์ธ์ ์ ์ฐ์ฑ์ ๊ทน๋ํํฉ๋๋ค. - Caching: ๋ฐ์ดํฐ ์บ์ฑ์ ํตํด ํฌ๋กค๋ง ์๋๋ฅผ ํฅ์์ํค๊ณ ์ค๋ณต fetch๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- Full-Page Scanning: ์คํฌ๋กค๋ง์ ์๋ฎฌ๋ ์ด์ ํ์ฌ ๋ชจ๋ ๋์ ์ฝํ ์ธ ๋ฅผ ๋ก๋ํ๊ณ ์บก์ฒํ๋ฉฐ, ํนํ ๋ฌดํ ์คํฌ๋กค ํ์ด์ง์ ์ ํฉํฉ๋๋ค.
- Deep Crawl Crash Recovery (v0.8.0):
on_state_change์ฝ๋ฐฑ๊ณผresume_stateํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ์ฅ์๊ฐ ๋ฅ ํฌ๋กค๋ง ์ค์๋ ํฌ๋์ ๋ฐ์ ์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ณต๊ตฌํ์ฌ ์์ ์ ์ฌ๊ฐํ ์ ์์ต๋๋ค. BFS, DFS, Best-First ์ ๋ต๊ณผ ์ฐ๋๋ฉ๋๋ค.
- Dynamic Crawling: ์น ํ์ด์ง์ JavaScript๋ฅผ ์คํํ๊ณ ๋น๋๊ธฐ/๋๊ธฐ ๋ก๋ฉ์ ๊ธฐ๋ค๋ ค ๋์ ์ฝํ
์ธ ๋ฅผ ์ถ์ถํฉ๋๋ค.
- ๋ฐฐํฌ ๋ฐ ํ์ฅ์ฑ:
- Dockerized Setup: FastAPI ์๋ฒ์ ํจ๊ป ์ต์ ํ๋ Docker ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํ์ฌ ์ฌ์ด ๋ฐฐํฌ๋ฅผ ์ง์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ๋์๋ณด๋, ๋ธ๋ผ์ฐ์ ํ๋ง, MCP(Multi-Client Protocol) ํตํฉ ๋ฑ ์ํฐํ๋ผ์ด์ฆ๊ธ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค.
- Scalable Architecture: ๋๊ท๋ชจ ํ๋ก๋์ ํ๊ฒฝ์ ์ต์ ํ๋ ์๋ฒ ์ฑ๋ฅ์ ์ํด ์ค๊ณ๋์์ต๋๋ค.
- Multi-URL Configuration (v0.7.3):
url_matcher๋ฅผ ํตํด URL ํจํด๋ณ๋ก ๋ค๋ฅธ ํฌ๋กค๋ง ์ ๋ต(CrawlerRunConfig)์ ์ ์ฉํ ์ ์์ด, ๋จ์ผ ๋ฐฐ์น ์ฒ๋ฆฌ์์๋ ์ ์ฐํ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค. - Prefetch Mode (v0.8.0): ์ค์ ์ ํตํด Markdown, ์ถ์ถ, ๋ฏธ๋์ด ์ฒ๋ฆฌ๋ฅผ ๊ฑด๋๋ฐ๊ณ URL ๋ฐ ๋งํฌ๋ง ๋น ๋ฅด๊ฒ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฒด ์ฒ๋ฆฌ๋ณด๋ค 5-10๋ฐฐ ๋น ๋ฅด๋ฉฐ, ๋ ๋จ๊ณ ํฌ๋กค๋ง(๋ฐ๊ฒฌ ํ ์ ํ์ ์ฒ๋ฆฌ)์ ์ ์ฉํฉ๋๋ค.
- ๋ชจ๋ํฐ๋ง ๋ฐ ๋๋ฒ๊น
:
- Real-time Monitoring Dashboard (v0.7.7): ๋ผ์ด๋ธ ์์คํ ๋ฉํธ๋ฆญ๊ณผ ๋ธ๋ผ์ฐ์ ํ ๊ฐ์์ฑ์ ์ ๊ณตํ๋ ์น UI๋ฅผ ํตํด ์ค์๊ฐ ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
- Comprehensive Monitor API & WebSocket Streaming (v0.7.7): ๋ชจ๋ ๋ชจ๋ํฐ๋ง ๋ฐ์ดํฐ์ ๋ํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์ ๊ทผ์ ์ํ REST API์ ์ค์๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ์ํ WebSocket ์คํธ๋ฆฌ๋ฐ์ ์ ๊ณตํฉ๋๋ค.
- Memory Monitoring (v0.7.3): ํฌ๋กค๋ง ์ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ถ์ ํ๊ณ ์ต์ ํ ๋ณด๊ณ ์๋ฅผ ์ ๊ณตํ์ฌ ํจ์จ์ ์ธ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ๋์ต๋๋ค.
Crawl4AI๋ ์น์์ LLM์ ์ํ ๊ณ ํ์ง ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๋ฐ ํ์ํ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.