Crawl4AI 网页转 Markdown 爬虫:从安装到跑通三个典型场景只要 5 分钟
2026/8/29 10:59:01 网站建设 项目流程

Crawl4AI 网页转 Markdown 爬虫:从安装到跑通三个典型场景只要 5 分钟

【免费下载链接】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

当你需要把网页变成能直接喂给大模型的 Markdown 时,Crawl4AI 网页转 Markdown 爬虫值得先看一眼。它把"打开页面、等渲染、取正文、清洗、转格式"这一串活打包进一个 Python 接口,你只管给 URL,它把干净的 Markdown 和结构化结果还给你。

为什么选 Crawl4AI 而不是常规爬虫

  • 它内置真实浏览器内核,能等 JavaScript 渲染完再取 HTML,普通 requests 抓不到动态内容它抓得到。
  • 输出天然是给 LLM 用的:标题、表格、代码块都转成规整 Markdown,省掉你手写清洗脚本。
  • 同一套接口从单页、批量到整站深爬都覆盖,不用在 Scrapy、Selenium、自研脚本之间来回切。
  • 会话、代理、缓存、反检测都是配置项,不用自己拼。

Crawl4AI 安装与初始化

先装包并装好浏览器内核:

pip install -U crawl4ai crawl4ai-setup crawl4ai-doctor

最小可运行示例:

import asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: result = await crawler.arun(url="https://www.nbcnews.com/business") print(result.markdown) asyncio.run(main())

跑完你会在终端看到该页面被清洗成带标题层级的 Markdown,广告、导航基本被剥掉,result里还有cleaned_htmlmedialinksmetadata等字段可直接取用。

浏览器报错时手动装内核:python -m playwright install --with-deps chromium

三个典型场景

Crawl4AI 如何只抓正文

如果你的页面正文和导航、页脚混在一起,用一个 CSS 选择器把范围框住即可。

from crawl4ai import CrawlerRunConfig config = CrawlerRunConfig( css_selector="article", # 只取正文容器 excluded_tags=["nav", "footer", "aside"], ) result = await crawler.arun(url="https://techcrunch.com", config=config)

效果:result.markdown只剩article内的内容,体积和 token 消耗都明显下降。

结构化提取:让 LLM 出结构化数据

当页面没有稳定的 DOM 结构、但字段语义清楚时,交给 LLM 按 schema 抽。

from crawl4ai import LLMConfig, LLMExtractionStrategy config = CrawlerRunConfig( extraction_strategy=LLMExtractionStrategy( llm_config=LLMConfig(provider="openai/gpt-4o-mini", api_token=os.getenv("OPENAI_API_KEY")), schema=Product.schema(), instruction="提取每个产品的名称、价格、描述", ) )

效果:result.extracted_content直接是符合Product模型的 JSON 列表,省去手写解析。

整站深爬:发现并爬取一整片 URL

要抓的不只是单页,而是从入口页开始把同域内容挖出来,就挂一个深爬策略。

from crawl4ai import BFSDeepCrawlStrategy config = CrawlerRunConfig( deep_crawl_strategy=BFSDeepCrawlStrategy( max_depth=3, max_pages=20, include_external=False ) ) result = await crawler.arun(url="https://docs.crawl4ai.com", config=config)

效果:从入口逐层发现链接并按max_depth/max_pages受控展开,避免失控。

进阶能力速览

能力什么情况下用它
自适应爬取AdaptiveCrawler反复抓同类站点,想让它自己学结构、按查询取数时用
内容过滤BM25ContentFilter/PruningContentFilter正文被大量导航、广告干扰,想自动留相关块时用
代理与反检测ProxyConfig/use_undetected_browser目标站点有反爬、或需要轮换出口 IP 时用
预取模式prefetch=TrueURL 发现太慢,想提速数倍时用
崩溃恢复resume_state长时间深爬中途挂了、想断点续爬时用

生产环境工程化建议

  • 并发控制:批量用await crawler.arun_many(urls, config),默认走MemoryAdaptiveDispatcher,可用semaphore_count=10限制同时开页面数。
  • 失败重试CrawlerRunConfig(max_retries=3, timeout=30000),配合异步调度器做超时兜底。
  • 缓存省配额cache_mode=CacheMode.ENABLED(默认是BYPASS不走缓存),重复抓同一批 URL 时能显著省时间和带宽。
  • 降资源占用headless=True、按需关掉screenshot与媒体提取,内存和磁盘都会小一圈。

避坑清单

现象:装完报浏览器内核缺失或崩溃原因:没装 Playwright 对应的 chromium 及系统依赖 解法:跑python -m playwright install --with-deps chromiumcrawl4ai-doctor复核

现象:抓回来的内容明显不全原因:页面靠 JS 渲染,默认返回时机太早 解法:CrawlerRunConfig(delay_before_return_html=2),或配wait_for等待关键元素

现象:正文里混入导航、广告、侧栏原因:默认清洗力度不够,选择器没限定 解法:excluded_tags=["nav","footer","aside"]PruningContentFilter进一步剪枝

现象:重复抓同一批页面浪费内存与配额原因:cache_mode默认BYPASS,每次都在真实请求 解法:改成CacheMode.ENABLED并设合适的cache_ttl

收尾

Crawl4AI 的核心价值是"一个接口同时管好渲染、清洗、抽取、深爬",让你把精力放回数据本身。建议顺着官方核心文档和示例代码往下读,再直接动手:把上面"只抓正文"里的css_selector换成你自己站点的正文选择器,跑一次看看result.markdown的效果。

  • 核心与 API 文档:docs/md_v2/core/
  • 可直接跑的示例:docs/examples/
  • 深度爬取策略源码:crawl4ai/deep_crawling/

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询