Crawl4AI :为大语言模型优化的开源网页爬虫与抓取工具

1- 🚀🤖 Crawl4AI :为大语言模型优化的开源网页爬虫与抓取工具

unclecode%2Fcrawl4ai 在 Trendshift 上的趋势

GitHub Stars
GitHub Forks

PyPI 版本
Python 版本
月下载量

许可证
代码风格: black
安全: bandit
贡献者契约

Crawl4AI 是 GitHub 上热度排名第一的代码仓库,由活跃的社区积极维护。它提供专为大语言模型( LLMs )、人工智能( AI )代理和数据处理流程量身打造、速度极快且适配 AI 应用的网页爬取功能。 Crawl4AI 开源、灵活,并为实时高性能而设计,赋予开发者无与伦比的速度、精度和部署便利性。

✨ 查看最新 v0.5.0 版本更新

🎉 0.5.0 版本正式发布! 本次重大更新引入了采用 BFS 、 DFS 、 BestFirst 策略的深度爬取功能、内存自适应调度器、多种爬取策略( Playwright 和 HTTP )、基于 FastAPI 的 Docker 部署方案、命令行界面( CLI )等众多新特性! 阅读发布说明 →

🤓 我的个人经历

我与计算机的缘分始于童年时代,当时我父亲——一位计算机科学家——给了我一台 Amstrad 电脑。这段早期经历点燃了我对技术的兴趣,促使我后来学习计算机科学,并在研究生期间专攻自然语言处理( NLP )。正是在那时,我初次涉足网页爬取领域,开发工具帮助研究人员整理论文、从出版物中提取信息。这段经历充满挑战,但也让我收获良多,极大地提升了我的数据提取能力。

时间来到 2023 年,我在为一个项目开发工具时,需要一个爬虫程序将网页内容转换为 Markdown 格式。在寻找解决方案的过程中,我发现了一个号称开源的工具,但它却要求用户注册账户并生成 API 密钥。更糟糕的是,它实际上是一个软件即服务( SaaS )产品,收费 16 美元,而且质量也达不到我的要求。挫败感油然而生,我意识到这背后是一个更普遍的问题。这种挫败感最终化为强烈的动力,我决心自己动手开发一个解决方案。仅仅几天后, Crawl4AI 就诞生了。令我惊喜的是,它迅速在网上走红,获得了数千个 GitHub 星标,并得到了全球开发者社区的积极响应。

我将 Crawl4AI 开源主要有两个原因。首先,这是我对开源社区的回馈,在我整个职业生涯中,开源社区都给予了我巨大的支持。其次,我认为数据应当是人人可以获取的资源,而不应被付费墙阻隔,或被少数公司垄断。数据的开放获取是实现人工智能( AI )民主化的基石,在这个愿景中,每个人都可以训练自己的模型,并真正拥有自己的信息。这个库只是一个开始,我的长远目标是,通过充满热情的社区协作,打造出全世界最优秀的开源数据提取与生成工具。

衷心感谢每一位支持、使用本项目并提供反馈的朋友。你们的鼓励是我追求更大梦想的动力。欢迎加入我们,提交问题、发起合并请求( PRs ),或者帮忙宣传。让我们携手并肩,共同打造一个真正赋能用户、让其能够访问自身数据并重塑 AI 未来的工具。

1.1- 🧐 为何选择 Crawl4AI ?

  1. 为 LLMs 量身打造: 生成智能、简洁的 Markdown 内容,特别适用于 RAG (检索增强生成)和模型微调场景。
  2. 性能卓越: 速度提升高达 6 倍,实现实时、高性价比的性能表现。
  3. 灵活的浏览器操控: 提供会话管理、代理设置及自定义钩子,轻松实现无缝数据访问。
  4. 启发式智能提取: 运用先进算法高效提取数据,减少对高成本 AI 模型的依赖。
  5. 开源且易于部署: 完全开源,无需 API 密钥,支持 Docker 和云平台部署。
  6. 活跃的社区支持: 由充满活力的社区积极维护,是 GitHub 上排名第一的热门项目。

1.2- 🚀 快速上手

  1. 安装 Crawl4AI :
# 安装软件包
pip install -U crawl4ai

# 安装预发布版本
pip install crawl4ai --pre

# 运行安装后配置脚本
crawl4ai-setup

# 检查安装是否成功
crawl4ai-doctor

如果遇到浏览器相关问题,可以尝试手动安装依赖:

python -m playwright install --with-deps chromium
  1. 使用 Python 执行简单的网页爬取:
import asyncio
from crawl4ai import *

async def main():
    # 异步上下文管理器确保资源正确释放
    async with AsyncWebCrawler() as crawler:
        # 异步运行爬取任务
        result = await crawler.arun(
            url="https://www.nbcnews.com/business", # 目标网址
        )
        # 打印提取到的 Markdown 内容
        print(result.markdown)

if __name__ == "__main__":
    asyncio.run(main())
  1. 或使用新增的命令行工具:
# 基本爬取,并将结果输出为 markdown 文件
crwl https://www.nbcnews.com/business -o markdown

# 使用 BFS 策略进行深度爬取,最多爬取 10 个页面
crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10

# 使用 LLM 进行提取,并指定提取问题
crwl https://www.example.com/products -q "提取所有产品价格"

1.3- ✨ 功能特性

📝 Markdown 生成
  • 🧹 **纯净 Markdown **: 生成格式规范、结构清晰的纯净 Markdown 内容。
  • 🎯 **精简 Markdown **: 基于启发式算法过滤,去除冗余信息和无关内容,优化 AI 处理效果。
  • 🔗 引用与参考文献: 将页面内链接转换为带编号的参考文献列表,引用格式清晰。
  • 🛠️ 自定义策略: 支持用户根据特定需求创建专属的 Markdown 生成策略。
  • 📚 ** BM25 算法**: 应用 BM25 算法进行内容筛选,提取核心信息,移除无关内容。
📊 结构化数据提取
  • 🤖 ** LLM 驱动提取**: 支持各类 LLMs (包括开源和商业模型)进行结构化数据提取。
  • 🧱 分块策略: 实现多种分块方法(按主题、正则表达式、句子)以进行精准内容处理。
  • 🌌 余弦相似度: 根据用户查询,利用余弦相似度匹配相关内容块,实现语义化提取。
  • 🔎 基于 CSS 提取: 利用 XPath 和 CSS 选择器,快速实现基于预定义模式的数据提取。
  • 🔧 模式定义: 允许用户自定义模式,用于从重复性结构中提取结构化 JSON 数据。
🌐 浏览器集成
  • 🖥️ 浏览器托管: 支持使用用户本地浏览器,完全控制浏览环境,有效规避反爬虫检测。
  • 🔄 远程浏览器控制: 可连接至 Chrome 开发者工具协议( Chrome Developer Tools Protocol ),支持远程、大规模数据提取。
  • 👤 浏览器配置管理: 创建并管理持久化用户配置,保存登录状态、 Cookies 及浏览器设置。
  • 🔒 会话管理: 保持浏览器状态,可在多步爬取任务中复用。
  • 🧩 代理支持: 无缝对接各类代理服务(支持身份验证),保障访问安全。
  • ⚙️ 完全浏览器控制: 可修改请求头、 Cookies 、用户代理( User Agent )等,实现高度定制化的爬取配置。
  • 🌍 多浏览器兼容: 支持 Chromium 、 Firefox 及 WebKit 内核的浏览器。
  • 📐 动态视口调整: 自动调整浏览器视窗大小以适应页面内容,确保完整渲染并捕获所有页面元素。
🔎 爬取与抓取
  • 🖼️ 多媒体支持: 可提取图片、音频、视频,并支持 srcsetpicture 等响应式图片格式。
  • 🚀 动态内容爬取: 支持执行页面 JavaScript ,并能等待异步或同步操作完成,以提取动态加载的内容。
  • 📸 页面截图: 支持在爬取过程中截取网页快照,方便调试与分析。
  • 📂 原始数据处理: 可直接处理本地 HTML (raw:) 文件或本地路径 (file://) 文件。
  • 🔗 全面链接提取: 能够提取页面内所有内部链接、外部链接以及嵌入式 iframe 中的内容。
  • 🛠️ 自定义钩子: 允许在爬取流程的各个阶段定义钩子函数,实现行为定制。
  • 💾 缓存机制: 支持缓存已获取数据,提升后续访问速度,避免重复请求。
  • 📄 元数据提取: 可从网页中抓取结构化的元数据信息。
  • 📡 ** IFrame 内容提取**: 无缝提取嵌入式 iframe 框架内的内容。
  • 🕵️ 惰性加载处理: 能够等待图片完全加载完成,确保不会因惰性加载( Lazy Load )机制而遗漏内容。
  • 🔄 全页扫描: 模拟用户滚动页面行为,加载并捕获所有动态内容,特别适用于无限滚动页面。
🚀 部署方案
  • 🐳 ** Docker 化部署**: 提供优化的 Docker 镜像,内置 FastAPI 服务,简化部署流程。
  • 🔑 安全认证: 内建 JWT 令牌认证机制,保障 API 接口安全。
  • 🔄 ** API 网关**: 提供一键部署方案,集成安全令牌认证,适用于基于 API 的工作流。
  • 🌐 可扩展架构: 专为大规模生产环境设计,优化服务器性能。
  • ☁️ 云平台部署: 提供适用于主流云平台的即用型部署配置。
🎯 其他特性
  • 🕶️ 隐身模式: 模拟真实用户行为,规避网站的反爬虫检测。
  • 🏷️ 基于标签提取: 可根据自定义标签、请求头或元数据筛选内容,实现更精准的爬取。
  • 🔗 链接分析: 提取并分析页面内所有链接,支持深度数据探索。
  • 🛡️ 错误处理: 具备健壮的错误管理机制,确保爬取任务流畅执行。
  • 🔐 ** CORS 与静态服务**: 支持基于文件系统的缓存及跨域资源共享( CORS )请求。
  • 📖 清晰文档: 提供简洁、更新及时的用户指南,覆盖入门及高级用法。
  • 🙌 社区致谢: 公开鸣谢贡献者和合并请求( Pull Requests ),提升项目透明度。

1.4- 立刻体验

✨ 在 Colab 中尝试: 在 Colab 中打开

✨ 访问我们的 官方文档网站

1.5- 安装 🛠️

Crawl4AI 提供多种安装方式,满足不同场景需求。您可以选择通过 Python 包管理器 pip 安装,或使用 Docker 镜像。

🐍 使用 pip 安装

请根据您的具体需求选择合适的安装方式:

1.5.1- 基本安装

适用于常规的网页爬取和数据抓取任务:

pip install crawl4ai
crawl4ai-setup # 配置浏览器环境

默认情况下,该命令将安装 Crawl4AI 的异步版本,并使用 Playwright 作为网页爬取引擎。

👉 提示: 安装 Crawl4AI 后, crawl4ai-setup 脚本会自动安装并配置 Playwright 。若遇到任何与 Playwright 相关的问题,可尝试以下任一方法手动安装:

  1. 通过命令行安装:

    playwright install
    
  2. 若上述命令无效,可尝试此更具体的命令:

    python -m playwright install chromium
    

    此方法在某些环境下可能更可靠。


1.5.2- 安装同步版本

同步版本(基于 Selenium )已被弃用,并将在未来版本中移除。如需使用,请执行:

pip install crawl4ai[sync]

1.5.3- 开发者安装

适用于希望参与项目开发、修改源代码的贡献者:

git clone https://github.com/unclecode/crawl4ai.git
cd crawl4ai
pip install -e .                    # 以可编辑模式安装基础依赖

安装可选功能依赖:

pip install -e ".[torch]"           # 安装 PyTorch 相关功能
pip install -e ".[transformer]"     # 安装 Transformer 相关功能
pip install -e ".[cosine]"          # 安装余弦相似度计算功能
pip install -e ".[sync]"            # 安装同步爬取 ( Selenium ) 功能
pip install -e ".[all]"             # 安装所有可选功能
🐳 Docker 部署

🚀 重大更新预告! 我们正在开发全新的 Docker 实现方案,旨在提供更高效、更无缝的部署体验。当前的 Docker 配置将被弃用,并由新方案取代。

1.5.4- 当前 Docker 支持

现有的 Docker 实现将被弃用并很快替换。如果您仍需使用当前版本的 Docker :

1.5.5- 新方案展望

我们全新的 Docker 实现将带来:

  • 更优的性能和资源利用率
  • 更简化的部署流程
  • 与 Crawl4AI 各项功能的更好集成
  • 更强的可扩展性选项

敬请关注我们的 GitHub 仓库 获取最新动态!


1.5.6- 快速测试

运行快速测试(适用于上述两种 Docker 方案):

import requests
import time

# 提交爬取任务
response = requests.post(
    "http://localhost:11235/crawl",
    json={"urls": "https://example.com", "priority": 10} # 指定URL和优先级
)
task_id = response.json()["task_id"] # 获取任务ID

# 持续轮询任务状态,直到完成 (status="completed")
while True:
    result_response = requests.get(f"http://localhost:11235/task/{task_id}")
    result_data = result_response.json()
    if result_data.get("status") == "completed":
        print("任务完成:", result_data)
        break
    elif result_data.get("status") == "failed":
        print("任务失败:", result_data)
        break
    print("任务进行中...")
    time.sleep(2) # 每隔2秒查询一次

更多示例请参见 Docker 示例代码。关于高级配置、环境变量及用法示例,请查阅我们的 Docker 部署指南

1.6- 🔬 高级用法示例 🔬

项目结构及更多示例代码位于 https://github.com/unclecode/crawl4ai/docs/examples 目录下。以下精选了一些常用示例供参考。

📝 结合“纯净”与“精简” Markdown 的启发式生成
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
# 导入内容过滤策略
from crawl4ai.content_filter_strategy import PruningContentFilter, BM25ContentFilter
# 导入 Markdown 生成策略
from crawl4ai.markdown_generation_strategy import DefaultMarkdownGenerator

async def main():
    # 配置浏览器行为
    browser_config = BrowserConfig(
        headless=True,  # 无头模式运行
        verbose=True,   # 输出详细日志
    )
    # 配置爬取运行参数
    run_config = CrawlerRunConfig(
        cache_mode=CacheMode.ENABLED, # 启用缓存
        # 使用默认 Markdown 生成器,并配置修剪内容过滤器
        markdown_generator=DefaultMarkdownGenerator(
            content_filter=PruningContentFilter(threshold=0.48, threshold_type="fixed", min_word_threshold=0) # 设置过滤阈值
        ),
        # 或者使用 BM25 内容过滤器(基于用户查询)
        # markdown_generator=DefaultMarkdownGenerator(
        #     content_filter=BM25ContentFilter(user_query="YOUR_QUERY_HERE", bm25_threshold=1.0) # 替换为你的查询和阈值
        # ),
    )
    
    # 创建异步爬虫实例
    async with AsyncWebCrawler(config=browser_config) as crawler:
        # 执行爬取任务
        result = await crawler.arun(
            url="https://docs.micronaut.io/4.7.6/guide/", # 目标 URL
            config=run_config # 应用运行配置
        )
        # 打印原始 Markdown 和精简后 Markdown 的长度
        print(f"原始 Markdown 长度: {len(result.markdown.raw_markdown)}")
        print(f"精简 Markdown 长度: {len(result.markdown.fit_markdown)}")

if __name__ == "__main__":
    asyncio.run(main())
🖥️ 执行 JavaScript 并提取结构化数据(无需 LLM )
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
# 导入基于 CSS 选择器的 JSON 提取策略
from crawl4ai.extraction_strategy import JsonCssExtractionStrategy
import json

async def main():
    # 定义提取模式 (Schema)
    schema = {
        "name": "KidoCode 课程信息", # 模式名称
        "baseSelector": "section.charge-methodology .w-tab-content > div", # 基础选择器,定位包含多个课程信息的元素
        "fields": [ # 定义需要提取的字段
            {
                "name": "section_title", # 字段名:区域标题
                "selector": "h3.heading-50", # CSS 选择器
                "type": "text", # 提取类型:文本
            },
            {
                "name": "section_description", # 字段名:区域描述
                "selector": ".charge-content",
                "type": "text",
            },
            {
                "name": "course_name", # 字段名:课程名称
                "selector": ".text-block-93",
                "type": "text",
            },
            {
                "name": "course_description", # 字段名:课程描述
                "selector": ".course-content-text",
                "type": "text",
            },
            {
                "name": "course_icon", # 字段名:课程图标
                "selector": ".image-92",
                "type": "attribute", # 提取类型:属性值
                "attribute": "src" # 提取 'src' 属性
            }
        ]
    }

    # 创建提取策略实例
    extraction_strategy = JsonCssExtractionStrategy(schema, verbose=True) # 启用详细日志

    # 配置浏览器
    browser_config = BrowserConfig(
        headless=False, # 非无头模式(可见浏览器界面)
        verbose=True
    )
    # 配置运行参数
    run_config = CrawlerRunConfig(
        extraction_strategy=extraction_strategy, # 应用提取策略
        # 需要在页面执行的 JavaScript 代码(例如:点击 Tab 切换内容)
        js_code=["""(async () => {
            const tabs = document.querySelectorAll("section.charge-methodology .tabs-menu-3 > div");
            for(let tab of tabs) {
                tab.scrollIntoView(); // 滚动到视图
                tab.click(); // 点击 Tab
                await new Promise(r => setTimeout(r, 500)); // 等待内容加载
            }
        })();"""],
        cache_mode=CacheMode.BYPASS # 禁用缓存,确保执行 JS
    )
        
    # 创建爬虫实例并运行
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(
            url="https://www.kidocode.com/degrees/technology", # 目标 URL
            config=run_config
        )

        # 解析提取到的 JSON 内容
        courses = json.loads(result.extracted_content)
        print(f"成功提取 {len(courses)} 个课程信息")
        # 打印第一个课程的详细信息(格式化输出)
        print(json.dumps(courses[0], indent=2, ensure_ascii=False))

if __name__ == "__main__":
    asyncio.run(main())
📚 使用 LLM 提取结构化数据
import os
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode, LLMConfig
# 导入基于 LLM 的提取策略
from crawl4ai.extraction_strategy import LLMExtractionStrategy
# 使用 Pydantic 定义数据模型 (Schema)
from pydantic import BaseModel, Field

# 定义 OpenAI 模型费用数据结构
class OpenAIModelFee(BaseModel):
    model_name: str = Field(..., description=" OpenAI 模型的名称。")
    input_fee: str = Field(..., description="该 OpenAI 模型的输入 Token 费用。")
    output_fee: str = Field(..., description="该 OpenAI 模型的输出 Token 费用。")

async def main():
    # 配置浏览器
    browser_config = BrowserConfig(verbose=True)
    # 配置运行参数
    run_config = CrawlerRunConfig(
        word_count_threshold=1, # 单词计数阈值(用于内容过滤)
        # 配置 LLM 提取策略
        extraction_strategy=LLMExtractionStrategy(
            # 可以使用 Litellm 支持的任何模型提供商,例如 ollama/qwen2
            # provider="ollama/qwen2", api_token="no-token", 
            # 配置 LLM 模型(这里使用 OpenAI GPT-4o)
            llm_config = LLMConfig(provider="openai/gpt-4o", api_token=os.getenv('OPENAI_API_KEY')), # 从环境变量获取 API Key
            schema=OpenAIModelFee.schema(), # 传入 Pydantic 模型的 Schema
            extraction_type="schema", # 提取类型:基于 Schema
            # 指示 LLM 如何提取信息的指令
            instruction="""请从爬取的内容中,提取所有提及的模型名称及其输入和输出 Token 的费用。
            确保不要遗漏内容中出现的任何模型。提取的单个模型应遵循以下 JSON 格式:
            {"model_name": "GPT-4", "input_fee": "US$10.00 / 1M tokens", "output_fee": "US$30.00 / 1M tokens"}。"""
        ),            
        cache_mode=CacheMode.BYPASS, # 禁用缓存
    )
    
    # 创建爬虫实例并运行
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(
            url='https://openai.com/api/pricing/', # 目标 URL
            config=run_config
        )
        # 打印 LLM 提取到的结构化内容
        print(result.extracted_content)

if __name__ == "__main__":
    asyncio.run(main())
🤖 使用本地浏览器及自定义用户配置
import os, sys
from pathlib import Path
import asyncio, time
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode

async def test_difficult_site_crawl():
    # 指定持久化用户数据目录
    user_data_dir = os.path.join(Path.home(), ".crawl4ai", "browser_profile")
    os.makedirs(user_data_dir, exist_ok=True) # 确保目录存在

    # 配置浏览器,使用持久化上下文和指定的用户数据目录
    browser_config = BrowserConfig(
        verbose=True,
        headless=True, # 推荐在需要登录或有复杂反爬时设为 False 进行调试
        user_data_dir=user_data_dir, # 指定用户数据目录
        use_persistent_context=True, # 启用持久化上下文(保存 Cookies, Local Storage 等)
    )
    # 配置运行参数
    run_config = CrawlerRunConfig(
        cache_mode=CacheMode.BYPASS # 禁用缓存以确保加载最新状态
    )
    
    # 创建爬虫实例并运行
    async with AsyncWebCrawler(config=browser_config) as crawler:
        # 替换为需要登录或有复杂反爬机制的网站 URL
        url = "YOUR_CHALLENGING_WEBSITE_URL" 
        
        # 首次运行时,可能需要手动登录。后续运行将使用已保存的会话。
        # 对于 Cloudflare 等防护,magic=True 可能有帮助
        result = await crawler.arun(
            url,
            config=run_config,
            magic=True, # 尝试启用智能绕过机制
        )
        
        print(f"成功爬取 {url}")
        print(f"内容长度: {len(result.markdown)}")

# 注意:首次运行可能需要在非无头模式下手动完成登录或验证码操作。
# atexit.register(lambda: asyncio.run(test_difficult_site_crawl())) # 或者直接运行
if __name__ == "__main__":
    asyncio.run(test_difficult_site_crawl())

1.7- ✨ 近期更新

1.7.1- v0.5.0 版本主要更新亮点

  • 🚀 深度爬取系统: 能够探索初始 URL 之外的更深层级网站内容,提供三种策略:
    • ** BFS 策略**: 广度优先搜索,逐层探索网站结构。
    • ** DFS 策略**: 深度优先搜索,深入探索每个分支直至末端再回溯。
    • ** BestFirst 策略**: 基于评分函数,优先爬取相关性更高的 URL 。
    • 页面数量限制: 通过 max_pages 参数控制最大爬取页面数量。
    • 评分阈值: 可根据 URL 的相关性评分进行筛选。
  • ⚡ 内存自适应调度器: 根据系统可用内存动态调整并发任务数,并内置请求速率限制。
  • 🔄 多种爬取策略:
    • ** AsyncPlaywrightCrawlerStrategy **: 基于浏览器的策略,支持 JavaScript 执行(默认)。
    • ** AsyncHTTPCrawlerStrategy **: 轻量级、快速的纯 HTTP 请求策略,适用于静态内容或 API 。
  • 🐳 Docker 部署优化: 提供集成了 FastAPI 服务器的 Docker 镜像,支持流式和非流式 API 端点,简化部署。
  • 💻 命令行界面 ( CLI ): 新增 crwl 命令,可在终端便捷使用 Crawl4AI 的所有功能,提供直观的命令和配置选项。
  • 👤 浏览器配置管理: 支持创建和管理持久化的浏览器用户配置,可保存登录状态、 Cookies 和设置,方便爬取需要登录或认证的网站。
  • 🧠 Crawl4AI 编码助手: AI 驱动的辅助工具,可解答关于 Crawl4AI 使用的问题,并生成相应的爬取代码。
  • 🏎️ LXML 解析模式: 新增使用 lxml 库进行 HTML 解析的选项,显著提升解析速度。
  • 🌐 代理轮换: 内置 RoundRobinProxyStrategy 策略,方便实现代理 IP 的轮换使用。
  • 🤖 LLM 内容过滤器: 利用 LLM 进行智能内容筛选,生成更符合需求的 Markdown 。
  • 📄 PDF 处理: 新增提取 PDF 文件中的文本、图片和元数据的功能。
  • 🔗 URL 重定向跟踪: 自动跟随并记录 HTTP 重定向过程。
  • 🤖 LLM 辅助 Schema 生成: 可借助 LLM 轻松创建用于数据提取的 Schema 结构。
  • 🔍 robots.txt 协议遵守: 自动识别并遵守目标网站的 robots.txt 爬取规则。

阅读完整的 0.5.0 版本发布说明 或查看 更新日志 ( CHANGELOG )

1.8- Crawl4AI 版本号规范

Crawl4AI 遵循标准的 Python 版本号约定( PEP 440 ),旨在帮助用户清晰了解每个版本的稳定性和特性。

1.8.1- 版本号详解

版本号格式为: 主版本号.次版本号.修订号 (例如: 0.4.3 )

1.8.1.1- 预发布版本

我们使用后缀来标识不同的开发阶段:

  • dev (例如 0.4.3dev1): 开发版,非常不稳定,仅供内部测试。
  • a (例如 0.4.3a1): Alpha 版,包含实验性新功能,可能存在较多 Bug 。
  • b (例如 0.4.3b1): Beta 版,功能已基本确定,但仍需广泛测试。
  • rc (例如 0.4.3rc1): 候选发布版,接近最终稳定版,主要进行 Bug 修复。

1.8.1.2- 安装说明

  • 安装最新稳定版:

    pip install -U crawl4ai
    
  • 安装最新的预发布版(包括 a/b/rc):

    pip install crawl4ai --pre
    
  • 安装指定版本(包括预发布版):

    pip install crawl4ai==0.4.3b1
    

1.8.1.3- 为何使用预发布版本?

推出预发布版本旨在:

  • 在真实环境中测试新功能。
  • 在正式发布前收集用户反馈。
  • 确保稳定版本的高质量,保障生产环境用户。
  • 让早期用户能够提前体验新特性。

对于生产环境,强烈建议使用最新的稳定版本。如果希望尝试新功能或参与测试,可以使用 --pre 参数安装预发布版本。

1.9- 📖 文档与路线图

🚨 文档更新通知: 我们计划在下周对文档进行一次大规模修订,以反映最新的功能更新和改进。敬请期待更全面、更易用的新版文档!

当前文档(包括安装指南、高级特性介绍和 API 参考)请访问我们的 官方文档网站

了解我们的开发计划和未来功能特性,请查阅项目 路线图 ( Roadmap )

📈 未来开发计划 ( TODO )
  • [x] 0. 图爬虫:利用图搜索算法智能遍历网站,实现嵌套页面的全面提取。
  • [ ] 1. 基于问题的爬虫:通过自然语言指令驱动网页内容发现和提取。
  • [ ] 2. 知识优化爬虫:智能爬取策略,旨在最大化知识获取,同时最小化数据量。
  • [ ] 3. Agentic 爬虫:构建能够执行复杂、多步骤爬取任务的自主系统。
  • [ ] 4. 自动化 Schema 生成器:将自然语言描述转换为结构化数据提取模式。
  • [ ] 5. 特定领域抓取器:为常用平台(如学术网站、电商平台)提供预配置的抓取方案。
  • [ ] 6. 网页嵌入索引:为爬取的内容构建语义搜索基础设施。
  • [ ] 7. 交互式实验平台 ( Playground ):提供 Web 界面,方便用户测试、比较不同策略,并集成 AI 辅助功能。
  • [ ] 8. 性能监控器:提供爬虫运行状态的实时监控和分析。
  • [ ] 9. 云集成:提供主流云平台的一键部署解决方案。
  • [ ] 10. 赞助计划:建立结构化的项目赞助体系,提供不同层级的回馈。
  • [ ] 11. 教育资源:制作 " 爬虫入门 " 系列视频教程和交互式学习材料。

1.10- 🤝 贡献代码

我们热忱欢迎来自开源社区的贡献。请查阅我们的 贡献指南 了解详情。

以下是更新后的许可证与署名部分:

1.11- 📄 许可证与署名

本项目采用 Apache License 2.0 许可证授权,并要求在使用时添加署名。详细条款请参见 Apache 2.0 许可证 文件。

1.11.1- 署名要求

当您在项目中使用 Crawl4AI 时,必须采用以下任一方式进行署名:

1.11.1.1- 徽章署名(推荐方式)

将下列任一徽章添加到您的项目 README 、文档或网站中:

主题 徽章预览
迪斯科主题 (动画) 由 Crawl4AI 驱动
霓虹夜景主题 (深色) 由 Crawl4AI 驱动
经典深色主题 由 Crawl4AI 驱动
经典浅色主题 由 Crawl4AI 驱动

添加徽章的 HTML 代码:

<!-- 迪斯科主题 (动画) -->
<a href="https://github.com/unclecode/crawl4ai">
  <img src="https://raw.githubusercontent.com/unclecode/crawl4ai/main/docs/assets/powered-by-disco.svg" alt="由 Crawl4AI 驱动" width="200"/>
</a>

<!-- 霓虹夜景主题 (深色) -->
<a href="https://github.com/unclecode/crawl4ai">
  <img src="https://raw.githubusercontent.com/unclecode/crawl4ai/main/docs/assets/powered-by-night.svg" alt="由 Crawl4AI 驱动" width="200"/>
</a>

<!-- 经典深色主题 -->
<a href="https://github.com/unclecode/crawl4ai">
  <img src="https://raw.githubusercontent.com/unclecode/crawl4ai/main/docs/assets/powered-by-dark.svg" alt="由 Crawl4AI 驱动" width="200"/>
</a>

<!-- 经典浅色主题 -->
<a href="https://github.com/unclecode/crawl4ai">
  <img src="https://raw.githubusercontent.com/unclecode/crawl4ai/main/docs/assets/powered-by-light.svg" alt="由 Crawl4AI 驱动" width="200"/>
</a>

<!-- 简洁 Shield 徽章 -->
<a href="https://github.com/unclecode/crawl4ai">
  <img src="https://img.shields.io/badge/Powered%20by-Crawl4AI-blue?style=flat-square" alt="由 Crawl4AI 驱动"/>
</a>

1.11.1.2- 文本署名

在您的文档或项目说明中添加以下文字:

本项目使用 Crawl4AI (https://github.com/unclecode/crawl4ai) 进行网页数据提取。

1.12- 📚 引用信息

如果您在研究或项目成果中使用了 Crawl4AI ,请按以下格式引用:

@software{crawl4ai2024,
  author = {UncleCode},
  title = {Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper},
  year = {2024},
  publisher = {GitHub},
  journal = {GitHub Repository},
  howpublished = {\url{https://github.com/unclecode/crawl4ai}},
  commit = {建议填写您所使用的具体 commit 哈希值}
}

文本引用格式:

UncleCode. (2024). Crawl4AI: 为大语言模型优化的开源网页爬虫与抓取工具 [计算机软件].
GitHub. https://github.com/unclecode/crawl4ai

1.13- 📧 联系方式

如有任何疑问、建议或反馈,欢迎通过以下方式联系我们:

祝您爬取顺利! 🕸️🚀

1.14- 🗾 项目使命

我们的使命是释放个人和企业数据的内在价值,将无形的数字足迹转化为结构化、可交易的数字资产。 Crawl4AI 通过提供强大的开源工具,赋能个人与组织高效地提取和结构化数据,进而培育一个共享的数据经济生态。

我们憧憬这样一个未来:人工智能( AI )的发展由真实的人类知识驱动,数据创造者能够直接从其贡献中获益。通过推动数据民主化,建立合乎道德的数据共享机制,我们正在为真正可靠、有价值的 AI 进步奠定坚实基础。

🔑 核心机遇
  • 数据资产化: 将数字足迹转化为可衡量、有价值的数据资产。
  • 可靠 AI 数据源: 为 AI 系统提供源于真实人类经验的高质量数据。
  • 共享经济模式: 构建一个公平的数据市场,让数据创造者受益。
🚀 发展蓝图
  1. 开源工具: 打造社区驱动的平台,实现透明、高效的数据提取。
  2. 数字资产结构化: 开发工具,帮助用户组织和评估数字知识的价值。
  3. 合规数据市场: 建立安全、公平的平台,促进结构化数据的合规交易与共享。

更多详情,请参阅我们的 完整使命宣言

1.15- Star 增长历史

Star 增长历史图表