Crawl4AI 完全指南:3 步把任意网页变成 LLM 能用的数据
【免费下载链接】crawl4ai🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper. Don't be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai
Crawl4AI 是一个开源的、对 LLM 友好的网页爬虫与抓取工具(Web Crawler & Scraper):它用真实浏览器打开网页,自动转成干净的 Markdown,还能用一句话指令提取结构化数据。登录页、动态加载、无限滚动这些老麻烦,它基本都能替你先扛下来。
它到底是什么
Crawl4AI 是一个 Python 库加一套命令行工具,定位是"给 AI 喂数据的中间层":你给它一个网址,它还给你可以直接塞进 RAG、Agent 或数据管道的 Markdown,外加按你要求格式化的 JSON。
它和传统做法的本质差异在于:传统爬虫(比如 requests + 解析库)拿到的是"死"HTML,遇到 JS 渲染、登录态、懒加载就得自己一堆补丁;Crawl4AI 底层挂的是 Playwright 真实浏览器,页面是"活"的——渲染完、滚动完、登录完再交给它处理。
pip install -U crawl4ai crawl4ai-setup # 自动安装并配置浏览器 crawl4ai-doctor # 验证安装是否正常装好后,不想写 Python 也能直接用命令行抓一个页面:
crwl https://www.nbcnews.com/business -o markdown想从源码开始看的话,仓库地址是https://gitcode.com/GitHub_Trending/craw/crawl4ai。
它替你扛下的 3 件烦心事
烦心事一:登录墙后面的数据,每次都要重新登录
痛点:目标网站要登录才能看数据。老办法是把 Cookie 存下来复放,结果会话一过期全白干,遇到验证码、双因素认证更是没法写代码硬绕。
解法:Crawl4AI 的"身份配置文件"(Profile)不是存几个 Cookie,而是保存一整个独立浏览器档案——Cookie、LocalStorage、浏览器指纹全在里面,存在~/.crawl4ai/profiles/<名字>目录。相当于你有一台"已经登录好的电脑",下次爬取直接复用这个身份。你在自己的浏览器里能看见的数据,就能用这个身份去自动化抓取。
上手:
crwl profiles # 打开交互式管理界面 # 选 2 创建 → 起个名(如 my-bank)→ 弹出浏览器 → 手动登录 → 终端按 q 保存 crwl https://bank-portal.com/statements -p my-bank -o json⚠️提醒:档案里的登录态会过期,它不能让你"一次登录、永久有效";正确姿势是定期重登刷新档案,把"重新登录"从每次任务变成偶尔维护。
烦心事二:页面是动态的,抓回来的内容总是缺半边
痛点:产品列表滚动才加载、点"加载更多"才出下一页、内容用 JavaScript 事后渲染。静态抓包只能拿到初始骨架,数据缺一大截。
解法:因为跑在真实浏览器里,Crawl4AI 给了你几种现成的"翻页手":scan_full_page会在返回前把整页滚一遍,把懒加载内容全部触发出来;对"加载更多"按钮这类交互,可以直接在任务里注入一段 JS 模拟点击;针对 Twitter/Instagram 那种"虚拟滚动"(旧内容会被从 DOM 里删掉、只保留可视区的渲染方式),内置了 VirtualScroll 处理,滚动时自动把被替换掉的内容累积起来,不会只抓到当前屏幕那一条。
上手:
crwl https://shop.example.com/products -c "scan_full_page=true,delay_before_return_html=2"想点按钮、等动画,就在配置里加一段 JS 执行,参考 docs/examples/assets/css_js.png 对应的示例 css_js 用法。
⚠️提醒:别靠无脑加大delay_before_return_html去"赌"内容加载完——固定长延迟只是拖慢速度,不如配合全页扫描或明确等待条件来得稳。
烦心事三:抓回来的 HTML 一团糟,没法喂给 LLM 或入库
痛点:就算页面抓全了,HTML 里混着导航栏、广告、脚本文本。你要么手写一堆 CSS 选择器逐站维护,要么把脏 HTML 直接丢给大模型,又贵又不准。
解法:Crawl4AI 默认就把 HTML 转成结构化 Markdown(标题、表格、链接都保留),链接还会自动转成编号引用列表。在这个基础上提供双模式提取:站点结构稳定就用 CSS/XPath 选择器 + 自定义 schema,按固定格式吐 JSON,快且零额外成本;站点结构多变或需要"语义级"理解(比如"把每篇新闻的标题、日期、核心观点摘出来"),就挂一个 LLM 提取策略,用自然语言指令下需求,底层支持各家模型。另外还有个 Cosine 策略,按"语义相似度"筛出和查询最相关的段落,适合从长文里定位关键内容。
上手:结构稳定时用-e 指定YAML规则 -s 指定JSON schema两个参数即可;需要语义提取时直接在命令行加一句自然语言指令(如-q "Extract all product prices"),或在代码里指定LLMExtractionStrategy。规则文件写法见 提取策略文档。
⚠️提醒:不是"有 LLM 就用 LLM"。结构固定的页面用选择器提取速度快好几倍还省钱,LLM 模式留给结构多变、需要语义判断的场景,两种混着用才是正解。
走一遍真实场景:给 RAG 知识库批量喂行业资讯
假设你要做一个竞品监控:每周抓取 3 个电商站的列表页,提取价格存库,同时把商品详情转成 Markdown 存进向量库。按这个需求拆一下选型:
- 列表页要滚动才全→ 开启全页扫描;
- 其中 1 个站要登录→ 提前建好 Profile;
- 详情页结构各异、经常改版→ 直接出 Markdown,不用写选择器;
- 价格字段要稳定入库→ 对列表页用 CSS 提取加 schema。
落地代码大概就是这样一个异步主循环(完整的配置项说明可查 CrawlerResult 文档):
import asyncio from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CSSExtractionStrategy async def main(): run_conf = CrawlerRunConfig( scan_full_page=True, extraction_strategy=CSSExtractionStrategy(schema="product_schema.json"), ) async with AsyncWebCrawler(config=BrowserConfig(user_data_dir="~/.crawl4ai/profiles/shop_b")) as crawler: result = await crawler.arun("https://shop-b.com/list", config=run_conf) print(result.extracted_content[:200]) # 价格 JSON print(result.markdown.fit_markdown[:200]) # 干净 Markdown 入向量库 asyncio.run(main())页面多了以后不用自己写并发,Dispatcher 会做批量调度并在终端里实时显示每个任务的状态、耗时和内存占用:
横向对比:它和其他方案差在哪
| 维度 | Crawl4AI | 传统框架(Scrapy 类) | 无代码抓取工具 | 商业 API 服务 |
|---|---|---|---|---|
| JS 动态页面 | 内置浏览器,滚动/交互/虚拟滚动都有现成配置 | 需自己集成 Selenium/Playwright | 基础支持,复杂交互受限 | 取决于服务商 |
| 登录与身份 | Profile 保存完整浏览器档案 | 手动管理 Cookie | 通常只存 Cookie | 大多不支持 |
| 输出格式 | 默认 LLM 友好 Markdown + 引用,可直接入 RAG | HTML 为主,需自行清洗 | 视产品而定 | 固定格式 |
| 结构化提取 | CSS/LLM/Cosine 多策略可混用 | XPath/CSS,规则全靠手写 | 可视化选元素,改版即失效 | 能力封闭 |
| 成本与可控性 | 免费开源,本地/Docker 自托管,无配额 | 免费但工程量大 | 多有次数限制 | 按量收费 |
一句话定位:Scrapy 是给你"管道零件"自己装,无代码工具是"帮你装但装坏了你看不见",Crawl4AI 是装好整机、还附了给 AI 用的说明书。
学习路径:建议按这个顺序读
- 快速入门 quickstart —— 第一次抓取、配置对象、两种提取策略各摸一遍;
- 命令行 CLI 文档 —— 熟悉
crwl的常用参数,适合不想写 Python 的场景; - 虚拟滚动 与 身份化爬取 —— 两个最容易被卡住的点,各花十分钟;
- 深度爬取 deep-crawling —— 需要整站抓取时再看;
- 示例目录 docs/examples/ —— 里面按场景分好了文件,遇到什么问题先搜同名示例基本都有。
下一步
如果你现在手里就有一个"想看它抓什么"的网址,最直接的第一步是:装好之后跑一句crwl 那个网址 -o markdown,看看它吐出来的 Markdown 干不干净——干净,就说明它适合你的场景;然后照着上面第三步挑一个提取策略,你的数据管道就算通了。
【免费下载链接】crawl4ai🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & Scraper. Don't be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考