ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

网页变 LLM 友好的 Markdown:Crawl4AI 从安装到深爬的完整实战指南

网页变 LLM 友好的 Markdown:Crawl4AI 从安装到深爬的完整实战指南 网页变 LLM 友好的 MarkdownCrawl4AI 从安装到深爬的完整实战指南【免费下载链接】crawl4ai Crawl4AI: Open-source LLM Friendly Web Crawler Scraper. Dont be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai把整站网页喂给大模型之前多数人卡在同一个环节HTML 里塞满导航栏、广告和脚本清洗一遍再塞token 又贵又杂。Crawl4AI 是一个开源的 LLM 友好型网页爬虫LLM Friendly Web Crawler核心就干一件事——把任意网页直接转成干净、可检索、带引用标注的 Markdown同时覆盖结构化提取、登录态持久化和整站深爬。它适合做 RAG 知识库、数据管道和竞品监控的开发者无需自建浏览器自动化流水线。下面按「装好 → 跑通 → 用深」的顺序展开每个能力点都配最小可运行示例。三步装好 Crawl4AI五分钟内跑通第一次爬取 安装分两步装包 初始化内置浏览器基于 Playwright 驱动 Chromium无需系统装 Chrome。# 1. 安装-U 保证拿到最新版当前稳定版 0.9.0 pip install -U crawl4ai # 2. 初始化浏览器环境下载 Chromium 及系统依赖 crawl4ai-setup # 3. 体检确认所有依赖就绪 crawl4ai-doctor跑通第一次爬取Python 侧只需要这几行import asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: # 一行拿到网页的 Markdown 输出 result await crawler.arun(urlhttps://www.nbcnews.com/business) print(result.markdown) asyncio.run(main())不想写代码也可以用 CLIcrwl命令随 pip 安装附带# 爬单页输出 Markdown crwl crawl https://example.com -o markdown # 深爬 10 个页面BFS 策略 crwl crawl https://example.com --deep-crawl bfs --max-pages 10 # 用自然语言问题提取结构化数据需配置 LLM crwl crawl https://example.com/products -q Extract all product prices到这里你就有了网页 → Markdown 的最小闭环。后面看四个真正拉开差距的能力。能力一智能 Markdown 生成——raw 与 fit 两种口径省 token 从源头开始Crawl4AI 的result.markdown实际包含两种文本raw_markdown是全量内容保留表格、代码块、引用编号列表fit_markdown则是经过启发式裁剪、只保留正文主体的瘦身版。裁剪底层可用两种过滤器Pruning按语义分块剪枝和 BM25按用户查询词做相关性打分词法是信息检索经典算法可理解为跟查询词越相关的段落得分越高。from crawl4ai import AsyncWebCrawler, CrawlerRunConfig from crawl4ai.markdown_generation_strategy import DefaultMarkdownGenerator from crawl4ai.content_filter_strategy import BM25ContentFilter config CrawlerRunConfig( markdown_generatorDefaultMarkdownGenerator( # 只保留与查询词相关的段落广告/侧栏被过滤 content_filterBM25ContentFilter( user_query数据库连接池配置说明, bm25_threshold1.0, ) ) ) async with AsyncWebCrawler() as crawler: result await crawler.arun(urlhttps://docs.example.com/db/pool, configconfig) print(len(result.markdown.raw_markdown)) # 全量长度 print(len(result.markdown.fit_markdown)) # 过滤后长度✅ 效果口径典型文档站经过 fit 过滤后token 量通常能压到全量版的一半左右直接降低后续 RAG 入库和推理的 API 成本引用链接会被自动转成编号参考列表方便回溯出处。常见误区把fit_markdown当成raw 去掉页脚的简单减法。它是按相关性打分的筛选结果——查询词给得越准过滤越狠但也可能误删弱相关的正文段落。入库前建议对fit与raw做一次抽样比对。能力二结构化提取双轨制——CSS 选择器求快LLM 求泛化要的不是 Markdown而是 JSONCrawl4AI 提供两条路CSS/XPath 轨JsonCssExtractionStrategy写一份 schema 定义每个卡片在哪、取哪些字段毫秒级、零 token 成本适合结构稳定的页面。LLM 轨LLMExtractionStrategy给一句自然语言指令 一个 Pydantic 模型做输出约束页面怎么改版都能提适合语义型任务。两者通过同一个extraction_strategy参数无缝切换。CSS 轨的最小示例schema 即选择器 字段名的声明from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, JsonCssExtractionStrategy schema { name: products, baseSelector: .product-item, # 每个产品卡片的容器 fields: [ {name: name, selector: .name, type: text}, {name: price, selector: .price, type: text}, {name: img, selector: img, type: attribute, attribute: src}, ], } config CrawlerRunConfig(extraction_strategyJsonCssExtractionStrategy(schema)) async with AsyncWebCrawler() as crawler: result await crawler.arun(urlhttps://shop.example.com/list, configconfig) print(result.extracted_content) # 直接是 JSON 字符串LLM 轨用 Pydantic 约束输出结构provider 支持 LiteLLM 覆盖的全部模型OpenAI、Ollama 本地模型等import os from pydantic import BaseModel, Field from crawl4ai import CrawlerRunConfig, LLMExtractionStrategy, LLMConfig class ProductFee(BaseModel): model_name: str Field(..., description模型名称) input_fee: str Field(..., description输入价格) config CrawlerRunConfig(extraction_strategyLLMExtractionStrategy( llm_configLLMConfig(provideropenai/gpt-4o-mini, api_tokenos.getenv(OPENAI_API_KEY)), schemaProductFee.schema(), extraction_typeschema, instruction提取页面中所有模型名称及对应输入/输出价格一个都不能漏。, ))常见误区默认 LLM 提取更强。实测经验是反过来——结构固定的页面走 CSS 轨快 3~5 倍且完全确定性LLM 轨慢、有随机性还花钱。LLM 轨真正的价值在页面结构多变、改版频繁的场景。能力三会话与身份持久化——登录一次长期复用还能瘦身很多数据在登录墙后面。Crawl4AI 的解法是浏览器配置文件Browser Profile把一整份真实 Chrome 用户目录Cookie、LocalStorage、登录态存成独立 profile后续爬取直接挂载等效于带着自己的身份上网。# 打开一个真实浏览器窗口手动完成登录按 q 保存 crwl profiles create bank-auth # 查看/删除已有 profile crwl profiles list crwl profiles delete bank-auth --force# 爬取时直接挂上 profile无需再写登录逻辑 crwl crawl https://portal.example.com/statements -p bank-auth -o markdown两个容易被忽略的细节profile 会膨胀。Chrome 用户目录动辄几百 MBCrawl4AI 提供crwl shrink子命令按 5 个档位light/medium/aggressive/minimal只保留认证相关数据aggressive档只留 Cookie、LocalStorage 与登录数据。反反爬是分层递进的。v0.8.5 起内置三级机器人检测识别已知拦截商 → 通用拦截特征 → 页面结构完整性命中后自动换代理重试并可挂兜底抓取函数from crawl4ai import CrawlerRunConfig from crawl4ai.async_configs import ProxyConfig config CrawlerRunConfig( proxy_config[ # 先直连被拦后自动升级走代理 ProxyConfig.DIRECT, ProxyConfig(serverhttp://my-proxy:8080), ], max_retries2, fallback_fetch_functionmy_unlocker, # 最后兜底第三方解锁/打码服务 flatten_shadow_domTrue, # 展平 Shadow DOM取出隐藏内容 )v0.7.3 起还支持browser_typeundetected的伪装浏览器模式用于对抗更激进的指纹检测。能力四深爬与断点续爬——长任务不怕断电两阶段省 5~10 倍开销整站级别的任务靠深爬策略驱动内置三种BFSDeepCrawlStrategy广度优先按层扩散、DFSDeepCrawlStrategy深度优先适合目录树型站点和 Best-First按评分选下一站支持过滤器与评分器代码在 crawl4ai/deep_crawling/。v0.8.0 的两个机制对生产环境很关键崩溃恢复on_state_change回调在每爬完一个 URL 后触发把状态序列化存走Redis/数据库均可进程挂掉后用resume_state从断点续爬不从头再来。Prefetch 两阶段模式prefetchTrue跳过 Markdown 生成、媒体处理和提取只拿 HTML 和链接官方口径比完整处理快 5~10 倍——先用它侦察全量 URL再对值得的页面做完整处理。from crawl4ai import AsyncWebCrawler, CrawlerRunConfig from crawl4ai.deep_crawling import BFSDeepCrawlStrategy strategy BFSDeepCrawlStrategy( max_depth2, # 控制爬多深 resume_stateNone, # 恢复时传入上次保存的状态即可续爬 on_state_changesave_to_redis, # 每完成一个 URL 持久化一次 ) config CrawlerRunConfig(deep_crawl_strategystrategy) async with AsyncWebCrawler() as crawler: results await crawler.arun_many( urls[https://docs.example.com], configconfig, )✅ 效果口径以 500 页文档站为例两阶段模式prefetch 侦察 精选深爬相比全量盲爬完整处理量可减少到目标页面的 20%~30%断点续爬则把跑 12 小时中途断网的损失从 12 小时降到零。组合实战从零搭一条文档知识库流水线把上面四个能力串起来是一条典型的网页 → 知识库流水线prefetch 发现 URL → 深爬 断点保护 → fit Markdown 入库 → LLM 提取补结构化字段。from crawl4ai import AsyncWebCrawler, CrawlerRunConfig from crawl4ai.deep_crawling import BFSDeepCrawlStrategy # 阶段一prefetch 侦察快速拿到全量 URL不做任何重处理 recon CrawlerRunConfig(prefetchTrue) async with AsyncWebCrawler() as crawler: probe await crawler.arun(https://docs.example.com, configrecon) print(len(probe.links.internal)) # 先看规模再决定预算 # 阶段二正式深爬断点续爬 fit 过滤 from crawl4ai.content_filter_strategy import PruningContentFilter from crawl4ai.markdown_generation_strategy import DefaultMarkdownGenerator strategy BFSDeepCrawlStrategy( max_depth2, resume_stateload_saved_state(), # 有断点就从断点恢复 on_state_changesave_state, # 每页落盘 ) config CrawlerRunConfig( deep_crawl_strategystrategy, markdown_generatorDefaultMarkdownGenerator( content_filterPruningContentFilter(threshold0.48), # 去噪 ), ) async with AsyncWebCrawler() as crawler: results await crawler.arun_many( urls[https://docs.example.com], configconfig, ) for r in results: if r.success: upsert_to_vector_store(r.url, r.markdown.fit_markdown)这条流水线的工程收益发现阶段开销低5~10x 加速、正文阶段 token 省一半、崩溃可恢复、引用可回溯——四个能力各管一段互不干扰。横向对比Crawl4AI 和 Scrapy、Playwright、商业 API 差在哪维度Crawl4AIScrapyPlaywright 自研商业爬虫 API定位网页 → LLM 友好 Markdown高效结构化抓取框架浏览器自动化工具库托管抓取服务动态渲染内置Playwright 驱动需集成 Playwright/Selenium原生但逻辑全自己写由服务商实现LLM 输出适配核心卖点fit Markdown 引用 BM25 过滤无无部分提供结构化提取CSS/XPath LLM 双轨XPath/CSS 成熟手写依赖其解析能力登录态管理浏览器 profile shrink手动管 Cookie手动管 storage state一般不支持反反爬三级检测 代理递进 undetected 模式需自建需自建依赖服务商运维观测Docker 监控面板 浏览器池常驻/热/冷三级需自建需自建黑盒成本开源免费自托管开源免费开源免费按请求计费学习曲线低pip 三行代码起步中高需懂框架模型高一切自己造低客观说纯结构化、高并发的传统抓取如批量爬列表站Scrapy 依然是更正统的选择Crawl4AI 的差异化集中在LLM 管道适配、登录态持久化和开箱即用的观测这三块。商业 API 适合不想运维的场景但数据不出域的要求下没有替代品。新手避坑清单五个高频问题用固定delay等动态内容→ 内容不全或浪费时间。优先用wait_for/JS 执行完成事件和 prefetch 两阶段而不是把延迟一路加到 5 秒。LLM 提取什么都干→ 结构稳定的页面走 CSS 轨更快更省更确定LLM 留给语义任务和频繁改版的页面。自托管 Docker API 直接升到 v0.9→ v0.9.0 是安全基线重构默认开启鉴权、服务默认绑定回环地址、hook 变为声明式。这是破坏性变更升级前先读 deploy/docker/MIGRATION.md。headless 被拦就只换 headful→ 顺序应是调 UA/视口 → 三级检测 代理递进 →flatten_shadow_dom→ undetected 模式 → 打码兜底逐级加码。profile 只建不删→ 每个 profile 都是完整 Chrome 用户目录定期用crwl shrinkaggressive 档瘦身和crwl profiles delete清理。另外一条底线爬取前确认目标站点的 robots 协议与服务条款生产环境给请求加合理间隔。场景速查按需求选配置你的场景推荐路径已知结构的列表/表格CSS/XPath 提取禁用 LLM语义型信息观点、摘要、价格语义LLM 提取 Pydantic schema建 RAG 知识库prefetch 两阶段 fit Markdown 深爬断点登录墙内数据crwl profiles建 profile -p挂载强反爬站点代理递进 undetected 模式 打码兜底多 URL 差异化处理arun_many传多个 config用url_matcher按 URL 模式分流资源与进阶官方文档站点docs.crawl4ai.com安装、API 参考、自托管指南可运行示例集docs/examples/含 Docker、代理、虚拟滚动、反检测等场景深爬策略源码crawl4ai/deep_crawling/浏览器 profile 管理与瘦身逻辑crawl4ai/browser_profiler.py需要完整源码时克隆仓库git clone https://gitcode.com/GitHub_Trending/craw/crawl4ai进阶方向AdaptiveCrawler让 LLM 判断页面相关性、自适应探索、DomainMapper按域名聚类规划爬取顺序、监控面板Docker 部署后访问/dashboard一句话总结Crawl4AI 把网页 → 干净 Markdown → 结构化数据这条最折腾的路做成了三行代码起步的标准件再用 profile 持久化、深爬断点恢复和分级反检测补齐企业级缺口。建议的动手路径今天用crwl爬一页验证输出本周搭一条 prefetch 深爬的知识库流水线遇到登录墙时再引入 profile 体系。先跑通再谈扩展。【免费下载链接】crawl4ai Crawl4AI: Open-source LLM Friendly Web Crawler Scraper. Dont be shy, join here: https://discord.gg/jP8KfhDhyN项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表