Crawl4AI 快速上手:把网页转成干净的 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
凌晨两点,你把爬虫跑了一整晚的 CSV 发给业务同事,对方回了一句:“标题和价格字段怎么全是空的?”回看日志,HTTP 状态码 200,一切正常——问题出在那个网站用 JavaScript 异步加载正文,requests 只抓到了空壳 HTML。Crawl4AI 正是为此而生的开源 LLM 友好型爬虫:内置无头浏览器渲染动态页面,直接把网页转成能喂给 RAG 的干净 Markdown。
传统抓取链路 vs Crawl4AI 的差异
传统链路是 requests 拉 HTML、正则或 XPath 挑字段、再手动清洗广告和导航。页面一改版,解析脚本就跟着崩,动态加载的正文更是抓不到。Crawl4AI 把「渲染、净化、转 Markdown、提取」四步压进一次 arun() 调用,输出默认带标题层级、表格和链接。用仓库里现成的批量测试看:100 个 URL 并发跑完用时 6 秒,内存峰值仅 126 MB。
| 对比项 | 传统做法 | Crawl4AI |
|---|---|---|
| 单页接入成本 | 写解析规则加等待逻辑,约 1 小时 | 5 行代码出 Markdown |
| 动态加载内容 | 需手写 Selenium 定位与 sleep | 内置浏览器自动渲染,可用 JS 注入点「下一页」 |
| 批量爬取 | 自己维护线程池与重试 | arun_many() 按内存自适应并发 |
| 结构化输出 | 逐字段正则清洗 | CSS 选择器或 LLM 一次出 JSON |
核心能力速览
异步浏览器池:基于 Playwright 的 Chromium 并发调度,arun_many() 会按可用内存自动决定开多少页面,而不是你手填一个并发数。
CSS 选择器与 JS 注入:css_selector 只提取命中节点,js_code 支持点击「Load More」等交互后等待内容变化,动态列表页不再靠 sleep 碰运气。
双路结构化提取:无需模型时用 CssJsonExtractionStrategy 按 schema 出 JSON,需要理解语义时换 LLMExtractionStrategy 指定提示词即可,两条路切换只改一个参数。
实战演示
先跑最小可运行示例:对单个 URL 发起一次爬取,自动渲染页面并输出 Markdown。
import asyncio from crawl4ai import AsyncWebCrawler async def main(): async with AsyncWebCrawler() as crawler: result = await crawler.arun("https://docs.crawl4ai.com") print(result.markdown[:300]) asyncio.run(main())运行后你会得到一个 CrawlResult,其中 markdown 字段是带标题层级的正文,另附 links、media、screenshot 等字段,截掉前 300 字符打印确认即可。
进阶技巧:给爬取任务挂一个 JSON schema,不花任何 LLM 调用就能拿到结构化记录。
from crawl4ai import AsyncWebCrawler, CssJsonExtractionStrategy schema = { "name": "Courses", "baseSelector": "section.charge-methodology .framework-collection-item.w-dyn-item", "fields": [ {"name": "course_name", "selector": ".text-block-93", "type": "text"}, {"name": "description", "selector": ".course-content-text", "type": "text"}, ], } config = CrawlerRunConfig( extraction_strategy=CssJsonExtractionStrategy(schema) ) async with AsyncWebCrawler() as crawler: result = await crawler.arun( url="https://www.kidocode.com/degrees/technology", config=config ) print(result.extracted_content)运行后 extracted_content 是一段 JSON 数组,每条记录含 course_name 与 description 两个字段,直接落库或转 CSV 即可,不用再写解析代码。
这些场景可以直接套
- 每天定时抓竞品价目表,CssJsonExtractionStrategy 提取后导出 CSV。
- 把整站文档批量转成 Markdown,喂给 RAG 做知识库。
- 新闻站列表页翻页采集:js_code 点击「下一页」,session_id 保留登录态。
- 需要留档时加 screenshot=True,每个页面自动回一张截图。
安装与首次运行
pip install -U crawl4ai && crawl4ai-setup装完跑 crawl4ai-doctor 自检浏览器环境。完整参数与示例见 docs/md_v2/core/quickstart.md,更多提取策略演示在 docs/examples/ 目录。
一条 arun() 调用从 URL 走到干净 Markdown,动态页面不再需要 sleep 碰运气。装一个包,拿你手头最难抓的那个页面试试。
【免费下载链接】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),仅供参考