项目快照:unclecode/crawl4ai,约 78,450 个 Star,8,119 个 Fork;最新推送时间 2026-08-17T09:01:57Z。本文基于仓库公开资料撰写。
项目地址:https://github.com/unclecode/crawl4ai · https://crawl4ai.com

项目速览(TL;DR)
crawl4ai 是一个使用 Python 编写的开源网页抓取与采集项目,核心目标是把网页内容转换为适合大语言模型(Large Language Model,LLM)处理的结构化 Markdown。仓库资料显示,项目采用 Apache-2.0 许可证,默认分支为 main,当前 GitHub 元信息为 78450 个 Star 和 8119 个 Fork。
它提供异步浏览器抓取接口、命令行接口(Command-Line Interface,CLI)、深度抓取策略、LLM 提取能力、Docker 部署方式,以及面向 Markdown、检索增强生成(Retrieval-Augmented Generation,RAG)和数据流水线的输出能力。仓库 README 标注的最新更新为 v0.9.2;使用时仍应以仓库当前 README 和发布说明为准。
- 项目语言:Python。
- 许可证:Apache-2.0。
- 最低 Python 版本:Python 3.10。
- Docker 服务端口:11235。
- 默认分支:
main。 - 官网与文档:Crawl4AI 官网与文档。
定位与目标用户
本项目定位于“面向 LLM 的网页爬虫与抓取器”,重点不只是获取 HTML,而是把网页内容整理为 Markdown、引用信息和可供后续模型或数据处理程序消费的结果。根据 README,项目面向 RAG、智能代理(Agent)和数据流水线等场景。
目标用户需要处理公开网页或已获授权的网站内容,并且希望在抓取、清洗、链接处理和模型提取之间使用同一套 Python 工具。项目同时提供 CLI 与 Docker 入口,因此既可用于本地脚本,也可作为内部服务部署;具体生产规模、服务等级协议(Service Level Agreement,SLA)和官方并发指标,资料中未提供。
- 需要将网页正文转换为 Markdown 的 Python 开发者。
- 需要为 RAG 知识库准备网页数据的工程团队。
- 需要通过深度抓取遍历文档站点的采集任务。
- 需要在授权环境中使用会话、代理、Cookie、用户脚本或钩子控制浏览器行为的团队。
- 需要通过 Docker 部署抓取服务,并自行管理 API 密钥、网络边界和运行时资源的运维人员。
核心功能
核心能力可分为网页渲染、内容清洗、深度遍历和结构化提取四个层次。输入可以是 URL、抓取策略和提取问题,输出则由抓取结果对象或 CLI 指定的 Markdown 输出构成。
Markdown 生成与内容筛选
README 将 Clean Markdown 描述为带有准确格式的结构化 Markdown,将 Fit Markdown 描述为基于启发式规则过滤噪声和无关内容的输出方式。链接还可以转换为编号引用列表,并保留页面中的引用线索;资料未给出完整字段定义,因此不能据此推导固定的 Markdown schema。
在 Python 示例中,AsyncWebCrawler 创建异步抓取器,arun 接收 URL,返回结果对象,调用方通过 result.markdown 读取 Markdown。该流程依赖 Playwright 浏览器组件完成页面访问,具体清洗规则和输出字段应以当前文档为准。
异步抓取与浏览器控制
项目通过异步上下文管理器使用 AsyncWebCrawler,示例中的 async with 负责建立和释放抓取资源。项目依赖中包含 aiohttp、anyio、playwright、patchright 和 playwright-stealth,这些依赖共同构成网络请求、异步调度和浏览器自动化相关的运行基础。
README 的功能说明还列出会话、代理、Cookie、用户脚本和钩子。资料没有提供每个配置对象的完整接口签名,所以本文不虚构这些能力的参数名称;需要使用时,应查阅当前官方文档和仓库源码。
深度抓取与 URL 发现
CLI 示例提供基于 BFS(Breadth-First Search,广度优先搜索)的深度抓取方式:--deep-crawl bfs 指定遍历策略,--max-pages 10 限制最多处理 10 个页面。该输入由 CLI 转换为抓取任务,输出仍可指定为 Markdown。
v0.8.0 发布说明还提到 resume_state、on_state_change 和 prefetch=True。前两项用于深度抓取的崩溃恢复状态,后者用于 URL 发现模式;README 声称 prefetch 模式可带来 5-10x 的 URL 发现速度,但该数据属于 README 的项目说明,不应视为独立基准测试结果。
LLM 提取
CLI 支持使用 -q 传入问题,例如从产品页面提取所有产品价格。依赖清单中的 unclecode-litellm==1.81.13 表明项目包含模型调用适配依赖;Docker Compose 注释列出 OpenAI、DeepSeek、Anthropic、Groq、Together、Mistral 和 Gemini 等 API 密钥变量,但资料没有给出默认模型、请求格式、返回 schema 或各提供商的兼容范围。
因此,LLM 提取的完整运行条件是:抓取内容可访问、对应模型服务凭据已在授权环境中配置,并且当前版本支持所选提供商。示例中的问题文本应限定为数据抽取任务,不应把抓取工具用于绕过访问控制、提交账号操作或处理未获授权的隐私数据。
系统架构与关键模块
从仓库资料可确认,项目由 Python 包、Playwright 浏览器运行时、CLI、可选模型依赖和 Docker 服务组合而成。下面的模块关系是根据 pyproject.toml、Dockerfile、docker-compose.yml 与 README 归纳,不代表仓库未公开部分的内部实现细节。
- Python 包层:安装包名为
Crawl4AI,包查找范围为crawl4ai*。 - 异步抓取层:README 示例使用
AsyncWebCrawler与arun。 - 浏览器层:依赖 Playwright,并通过
crawl4ai-setup与playwright install --with-deps准备 Chromium。 - 命令行层:
crwl映射到crawl4ai.cli:main,负责基础抓取、深度抓取和问题驱动提取。 - 模型与文本处理层:包含 LiteLLM 适配、Pydantic、NLTK、rank-bm25、snowballstemmer 等依赖;部分模型能力通过可选依赖安装。
- 容器服务层:Dockerfile 使用 Supervisor、Redis 和 Gunicorn 相关配置启动服务,Compose 将服务映射到主机的 11235 端口。
Dockerfile 还显示,构建阶段会复制 deploy/docker/supervisord.conf、deploy/docker/requirements.txt、deploy/docker/static 和其他 Docker 部署文件。运行时使用 appuser,应用目录被设置为不可写,输出目录位于 /var/lib/crawl4ai/outputs。
依赖与运行环境
项目要求 Python 版本不低于 3.10,分类器列出了 Python 3.10、3.11、3.12 和 3.13。Dockerfile 的基础镜像为 python:3.12-slim-bookworm,并安装 Chromium 所需的系统库、Redis、Supervisor 和构建工具。
基础安装会带上浏览器、异步网络、HTML 解析、图像处理、配置解析和 CLI 依赖。PyTorch、Transformers、PDF 与 Selenium 等内容被放在可选依赖组中,不能假设基础安装已经包含这些组件。
| 依赖组或组件 | 资料中的内容 | 用途 |
|---|---|---|
| 基础运行时 | Python >=3.10 | 满足项目声明的最低 Python 版本。 |
| 浏览器 | playwright >=1.49.0、patchright >=1.49.0 | 支持浏览器驱动和页面抓取运行时。 |
| HTML 解析 | lxml >=5.3,<7、beautifulsoup4 ~=4.12、cssselect >=1.2.0 | 支持网页文档解析与选择。 |
| PDF 可选组 | pdf = ["pypdf"] |
提供 PDF 相关可选依赖。 |
| torch 可选组 | torch、nltk、scikit-learn |
提供与 Torch、文本处理和机器学习相关的可选能力。 |
| transformer 可选组 | transformers、tokenizers、sentence-transformers |
提供 Transformer 与句向量相关依赖。 |
| sync 可选组 | selenium |
提供同步 Selenium 相关可选依赖。 |
快速开始(含最小可运行示例)
最小闭环由安装、浏览器准备、运行抓取和诊断验证组成。以下命令来自 README,适合在隔离的本地 Python 环境或已获授权的测试环境执行。
安装与浏览器准备
python -m venv .venv
source .venv/bin/activate
pip install -U crawl4ai
crawl4ai-setupREADME 同时提供了 crawl4ai-doctor 验证命令。若浏览器相关组件尚未安装,可执行下列命令安装 Chromium 及其依赖;操作系统权限和系统包管理器行为不在仓库资料范围内。
python -m playwright install --with-deps chromium
crawl4ai-doctorPython 最小示例
import asyncio
from crawl4ai import *
async def main():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(
url="https://docs.crawl4ai.com",
)
print(result.markdown)
if __name__ == "__main__":
asyncio.run(main())示例输入是文档站点 URL,输出为抓取结果中的 Markdown 文本。示例没有使用模型密钥,也没有提交表单或修改远程资源;在实际任务中应先确认目标站点的授权、robots 规则和服务条款。
CLI 最小验证
crwl https://docs.crawl4ai.com -o markdown
crwl https://docs.crawl4ai.com --deep-crawl bfs --max-pages 10-o markdown 用于指定 Markdown 输出,深度抓取命令使用 BFS 策略并将页面上限设为 10。若命令无法启动浏览器,优先运行 crawl4ai-doctor,再检查 Playwright Chromium 是否完成安装。
配置说明
项目配置分布在 Python 安装参数、Docker 构建参数和 Compose 运行环境中。下表只列出资料中明确出现的字段;未写出的默认模型、超时、并发和缓存策略不作推断。
| 字段名 | 类型 | 默认值 | 作用 |
|---|---|---|---|
INSTALL_TYPE |
字符串 | default |
Docker 构建时选择基础、all、torch 或 transformer 安装类型。 |
ENABLE_GPU |
布尔字符串 | false |
Docker 构建时控制是否尝试安装 NVIDIA CUDA Toolkit;Dockerfile 限定了 amd64 条件。 |
TAG |
字符串 | latest |
Compose 中用于拼接默认镜像标签。 |
IMAGE |
字符串 | unclecode/crawl4ai:${TAG:-latest} |
Compose 中覆盖默认镜像名称。 |
C4AI_VER |
字符串 | 0.9.2 |
Dockerfile 中的 Crawl4AI 构建版本参数,并写入 C4AI_VERSION。 |
USE_LOCAL |
布尔字符串 | true |
Dockerfile 安装脚本中控制从本地源码还是 GitHub 分支安装。 |
GITHUB_BRANCH |
字符串 | main |
从 GitHub 安装时使用的分支。 |
REDIS_HOST |
字符串 | localhost |
Dockerfile 设置的 Redis 主机。 |
REDIS_PORT |
整数型字符串 | 6379 |
Dockerfile 设置的 Redis 端口;Compose 注释要求不要暴露该端口。 |
OPENAI_API_KEY |
字符串 | 未提供 | Compose 注释列出的 LLM 提供商凭据字段。 |
LLM_PROVIDER |
字符串 | 未提供 | Compose 注释列出的可选模型提供商覆盖字段。 |
Compose 使用 .llm.env 作为环境文件,资料要求创建该文件,但没有提供完整的 .llm.env.example 内容。API 密钥应使用测试或生产密钥管理机制注入,不应写入源码、镜像层、日志或公开仓库。
进阶用法
进阶能力适合将一次性抓取扩展为可恢复、可筛选和可交付的数据任务。资料明确给出了深度抓取、预取、状态回调和 LLM 问题提取等入口,但没有提供所有策略类和配置对象的完整 API 定义。
深度抓取与恢复状态
深度抓取适合文档站点这类需要从入口 URL 继续发现链接的场景。CLI 通过 --deep-crawl bfs 选择 BFS,并通过 --max-pages 设置页面上限;长时间任务可以使用 README 提到的 resume_state 和 on_state_change 机制保存与观察状态。
预取模式
README 将 prefetch=True 描述为 URL 发现模式,用于减少发现阶段的等待。它适合把“发现候选 URL”和“完整抓取页面内容”分离的任务;资料没有给出该参数适用的全部策略、内存开销或失败重试规则,部署前应在目标数据集上验证。
问题驱动的模型提取
crwl https://docs.crawl4ai.com -q "Extract the page title and headings"上面的命令沿用 README 的 -q 用法,问题文本仅用于测试页面内容提取。若改用 Docker Compose 中列出的 LLM 提供商,需要在 .llm.env 中配置相应的 <提供商>_API_KEY;本文不填入真实密钥,也不指定仓库资料未说明的模型名称。
可观测性与运维
Docker 配置提供了健康检查、资源限制、只读根文件系统、进程数上限和 Redis 存活检查。运维人员可以据此建立容器存活、HTTP 健康和资源使用的基础监控,但资料没有给出业务指标、结构化日志字段、追踪协议或 SLA。
- Compose 健康检查访问
http://localhost:11235/health。 - Dockerfile 健康检查还执行
redis-cli ping。 - Compose 内存限制为 4G,预留为 1G。
- Compose 的
shm_size为1gb,用于浏览器共享内存。 pids_limit为 512,并设置no-new-privileges:true。- Compose 将根文件系统设置为只读,并为临时目录和运行时目录提供 tmpfs。
Dockerfile 的健康检查在可用内存少于 2048MB 时返回失败,并检查 Redis 与 11235 端口。该行为属于容器健康判断,不等同于项目对实际抓取容量的性能承诺。
安全与合规边界
网页抓取涉及网络访问、第三方内容、Cookie、代理和模型服务凭据,应只用于已获授权的目标和测试环境。项目不能替代网站所有者的许可、隐私评估、数据保留制度、robots 规则审查或组织内部审批。
- 仅抓取公开且允许访问的内容,或事先获得目标站点和数据主体的明确授权。
- 不要把账号密码、会话 Cookie、个人信息和 API 密钥写入代码、镜像或日志。
- 对抓取结果实施访问控制、最小化采集、保留期限和删除流程。
- 对外部网页内容视为不可信输入,避免直接执行页面脚本、下载未知文件或把模型输出当作安全指令。
- 部署 Docker 服务时限制网络出口、控制端口暴露,并保持 Redis 仅在容器内部使用。
README 记录 v0.9.0 将 Docker API 服务调整为安全默认配置,包括默认启用认证、未提供令牌时绑定 loopback,以及把请求体视为不可信边界。README 还记录 v0.8.7 的安全加固内容;这些是版本发布说明中的事实,不表示当前部署已经满足所有组织安全基线,仍需结合当前代码和配置审计。
许可证与商用条款
仓库 LICENSE 明确使用 Apache License 2.0。该许可证授予永久、全球、非排他、免版税的版权许可,并包含专利许可条款;具体权利和终止条件以仓库 LICENSE 原文为准。
Apache-2.0 允许在符合许可证条件的前提下复制、修改、分发和用于商业场景。分发原项目或衍生作品时,需要向接收方提供许可证、保留版权与专利及归属声明,并对修改过的文件附加显著的修改说明;如果发行包包含 NOTICE 文件,还需按 LICENSE 要求保留其中的归属信息。
许可证不授予对许可方商号、商标、服务标志或产品名称的使用权,合理描述项目来源的使用除外。项目的云 API 处于 README 所述的 Closed Beta 状态,云服务资格、价格、SLA 和商业支持不属于 Apache-2.0 对源码许可的自动承诺,相关事项应以官方页面和单独协议为准。
局限性与已知限制
资料能够确认项目提供抓取与提取能力,但没有给出跨站点成功率、吞吐量、并发上限、内存曲线、浏览器兼容矩阵或生产 SLA。不能根据 Star、Fork 或 README 中的“5-10x”描述推导通用性能结论。
- 浏览器依赖需要额外安装 Chromium;缺失系统库或浏览器缓存时,抓取可能无法启动,官方资料建议使用
crawl4ai-doctor检查。 - Docker 构建包含浏览器、Redis 和可选机器学习依赖,镜像构建与运行资源会随
INSTALL_TYPE和ENABLE_GPU变化。 - LLM 提取依赖外部模型提供商和凭据,资料没有承诺模型输出稳定性、成本、延迟或结果准确率。
- 网页结构、访问权限、反自动化策略和内容许可由目标站点决定,项目资料没有承诺对任意站点可用。
- Docker Compose 的健康检查包含内存门槛、Redis 和 HTTP 检查;这可能使资源不足的容器被标记为不健康。
- 项目在
pyproject.toml中标记为 Beta 开发状态,升级前应阅读对应版本发布说明并进行回归测试。
官方仓库未提供详细目录说明、完整服务 API、并发建议和错误码列表,建议以最新 README、官方文档和当前源码为准。
适合谁
以下信号同时满足两项或以上时,项目与任务的匹配度较高。最终选择仍应由授权范围、数据处理要求和现有技术栈共同决定。
- 团队使用 Python 3.10 及以上版本,并且可以接受 Playwright 浏览器运行时。
- 任务输出需要 Markdown、网页引用信息或面向 RAG 的清洗文本,而不是只保存原始 HTML。
- 需要从文档入口 URL 扩展到多个页面,并且可以用页面上限控制任务边界。
- 团队能够自行管理 LLM 提供商密钥、Docker 资源、网络出口和抓取结果的访问权限。
- 任务运行在已获授权的公开数据或内部测试环境中,能够落实隐私、留存和删除要求。
不适合谁
以下信号表明需要谨慎评估,或者应选择不依赖浏览器抓取的替代设计。资料未列出其他具体替代项目,因此本文不虚构项目对比结果。
- 运行环境不能安装 Chromium、系统依赖或 Docker 所需的浏览器共享内存。
- 任务要求官方保证固定吞吐量、严格 SLA、确定性模型结果或已公开的并发上限。
- 组织不能接受外部模型服务,且不准备部署或配置本地模型依赖。
- 目标数据包含高敏感个人信息,但团队没有脱敏、访问控制、保留期限和授权流程。
- 目标站点明确禁止自动化访问,或者任务依赖绕过登录、验证码、访问控制或检测机制。
常见问题与排查(FAQ / Troubleshooting)
排查应先区分安装问题、浏览器问题、配置问题和目标站点问题。下面的处理步骤只覆盖仓库资料明确提供的命令和配置,不替代目标环境的日志审计。
安装后无法启动浏览器怎么办
先执行 crawl4ai-doctor,然后按 README 的方式执行 python -m playwright install --with-deps chromium。Dockerfile 中则通过 crawl4ai-setup 和 playwright install --with-deps 准备浏览器;若使用自定义镜像,应确认这些步骤确实完成。
为什么 Docker 容器显示不健康
检查 http://localhost:11235/health 是否可访问,并检查 Redis 的 redis-cli ping。Dockerfile 还会在可用内存低于 2048MB 时返回失败,而 Compose 设置了 4G 内存上限和 1G 预留,需要结合宿主机资源检查。
LLM 提取没有结果时检查什么
先确认 URL 在授权测试环境中可访问,再检查 .llm.env 是否加载了对应 API 密钥。资料没有提供统一的模型默认值和错误码,因此需要查看当前版本文档、容器日志及所选提供商的响应状态,不应把空结果直接解释为网页没有内容。
如何限制深度抓取范围
CLI 示例使用 --max-pages 10 设置页面数量上限,并用 --deep-crawl bfs 选择 BFS 策略。更细的域名、路径、去重和恢复参数,官方仓库资料未完整提供,建议查阅当前文档后再投入长时间任务。
是否可以直接暴露 Redis 端口
不应这样配置。Compose 注释明确要求 Redis 在容器内部使用且不要暴露 6379 端口;对外只映射服务的 11235 端口,并按当前版本的认证和网络配置进行安全评估。
部署与升级检查清单
部署前的收益在于把抓取行为、凭据和运行资源边界固定下来。以下清单来自 Dockerfile、Compose 和 README 中出现的配置,适用于内部测试部署的初始检查。
- 确认 Python、Docker、Chromium 和系统依赖满足当前版本要求。
- 确认
.llm.env不会被提交到版本控制,并只注入授权使用的模型凭据。 - 确认主机只按需暴露 11235,Redis 6379 不对外发布。
- 确认 Compose 的只读根文件系统、tmpfs、非 root 用户和能力降级设置未被无理由删除。
- 确认输出目录
/var/lib/crawl4ai/outputs的权限符合内部数据访问策略。 - 升级前阅读 v0.9.2、v0.9.0、v0.8.7 等对应发布说明,并在测试站点执行基础抓取、深度抓取和模型提取回归。
Dockerfile 将应用运行用户切换为 appuser,并把应用目录设置为 root 所有且不可写。若自定义 entrypoint、挂载目录或 Compose 覆盖项改变了这些边界,应重新进行权限和持久化风险审查。
版本与维护信息
仓库 README 标注 v0.9.2 为维护补丁版本,修复内容包括流式抓取关闭时 MemoryAdaptiveDispatcher 的任务或页面泄漏、Docker Playground 高级配置、Monitor WebSocket 认证、Playwright headless-shell 打包以及 ENABLE_GPU=true 的 Docker 构建问题。
README 还记录 v0.9.0 的 Docker API 安全默认配置,以及 v0.8.7 的安全加固和抓取、深度抓取、LLM 相关修复。版本选择不能只看仓库 Star 数量;应根据目标环境对浏览器、模型依赖、Docker 安全配置和现有代码兼容性的验证结果决定。
项目地址与资源
以下链接均来自仓库元信息、README 或项目配置,可用于获取源码、文档、发布说明和社区入口。
- crawl4ai GitHub 仓库
- Crawl4AI 官网与文档
- v0.9.2 发布说明
- v0.9.0 发布说明
- v0.8.7 发布说明
- v0.8.0 发布说明
- v0.7.8 发布说明
- Crawl4AI Discord 社区
- Crawl4AI X 官方账号
- Crawl4AI LinkedIn 官方页面
“Crawl4AI turns the web into clean, LLM ready Markdown for RAG, agents, and data pipelines.”
来源:README



