第 1 课
装好 Crawl4AI,跑通诊断,第一次把网页抓成 Markdown
在虚拟环境里安装 crawl4ai==0.9.5,运行 crawl4ai-setup 与 crawl4ai-doctor,再用 AsyncWebCrawler.arun 抓 https://example.com,看懂 success、Markdown 长度和正文节选。
课程目录第 1 / 3 课
学习位置仅保存在当前浏览器,有效期 180 天。
图文教材
本课对照的官方页面:Installation 、Quick Start 、PyPI:crawl4ai 0.9.5 。测试环境:2026-11-06,Linux x86_64 云主机,Python 3.13.5,crawl4ai 0.9.5。下面的「对照结果」都是这台机器的真实输出,只做了节选。
Crawl4AI 是面向大模型的开源网页爬虫(Apache-2.0)。它启动一台无头浏览器,打开你给的网址,再把页面转成 Markdown,方便直接塞进 RAG 或交给智能体。本课先把环境装好、跑通诊断,再用最短的 AsyncWebCrawler.arun 抓一次 https://example.com 。
第 1 步:建虚拟环境并安装
官方要求 Python 3.10 及以上(站内工具页与常见文档按 3.10 至 3.13 写;本课实测 3.13.5)。建议装在虚拟环境里,并锁定本课版本:
mkdir -p ~/crawl4ai-lab && cd ~/crawl4ai-lab
python3 -m venv .venv
source .venv/bin/activate
pip install crawl4ai==0.9.5
python -c "from crawl4ai.__version__ import __version__; print(__version__)"
对照结果:
0.9.5
可选地装「全家桶」依赖:pip install "crawl4ai[all]==0.9.5"。[all] 会带上 Torch、Transformers 等重量级包,磁盘和内存占用明显变大;本课只用核心功能,不装 [all]。
第 2 步:跑 setup 装好浏览器
安装完成后,官方要求再跑一次 setup,把 Playwright 浏览器和系统依赖补齐:
crawl4ai-setup
这一步会下载 Chromium(体积不小,需要能访问外网)。如果中途失败,按终端提示补系统库后重跑即可。本课测试机此前已经跑过 setup,浏览器可用,这里不再重复贴冗长日志。
第 3 步:用 crawl4ai-doctor 做健康检查
export CRAWL4AI_NO_CLOUD_NOTICE=1
crawl4ai-doctor
CRAWL4AI_NO_CLOUD_NOTICE=1 用来关掉终端里推广托管 Cloud 的提示,不影响抓取本身。对照结果(节选):
[INIT].... → Running Crawl4AI health check...
[INIT].... → Crawl4AI 0.9.5
[TEST].... ℹ Testing crawling capabilities...
[EXPORT].. ℹ Exporting media (PDF/MHTML/screenshot) took 0.06s
[FETCH]... ↓ https://crawl4ai.com
| ✓ | ⏱: 1.26s
[SCRAPE].. ◆ https://crawl4ai.com
| ✓ | ⏱: 0.02s
[COMPLETE] ● https://crawl4ai.com
| ✓ | ⏱: 1.30s
[COMPLETE] ● ✅ Crawling test passed!
看到 Crawling test passed! 就说明本机浏览器、抓取和导出链路是通的。如果这里失败,先回到上一步重跑 crawl4ai-setup,再查官方 Installation 页的排错说明。
第 4 步:第一次 arun,抓 example.com
新建 first_crawl.py:
import asyncio
from crawl4ai import AsyncWebCrawler
async def main():
async with AsyncWebCrawler() as crawler:
result = await crawler.arun("https://example.com")
print("SUCCESS", result.success)
print("URL", result.url)
md = result.markdown
text = md.raw_markdown if hasattr(md, "raw_markdown") else str(md)
print("MD_LEN", len(text))
print(text[:280])
print("...")
print(text.splitlines()[-1])
if __name__ == "__main__":
asyncio.run(main())
运行:
export CRAWL4AI_NO_CLOUD_NOTICE=1
python first_crawl.py
对照结果(正文只保留英文首段、省略中间多语言段落,最后一行保留):
SUCCESS True
URL https://example.com
MD_LEN 953
This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.
...
[Learn more](https://iana.org/help/example-domains)
读结果时注意三点:
result.success为True表示抓取成功;失败时看result.error_message。result.markdown在较新版本里常常是带raw_markdown/fit_markdown属性的对象,所以上面用hasattr兼容「字符串」和「对象」两种形态。- example.com 现在是多语言说明页,Markdown 里会有多段译文,末尾保留指向 IANA 的
Learn more链接。
终端里还会夹几行 [FETCH] / [SCRAPE] / [COMPLETE] 进度日志,和 doctor 里看到的格式一样,属于正常输出。
第 5 步:用命令行再抓一次(可选核对)
同一个页面也可以不写 Python,直接用自带的 crwl:
crwl crawl https://example.com -o markdown -bc | head -n 2
对照结果:
This domain is for use in documentation examples without needing permission. This is not a service; avoid relying on it for testing and monitoring purposes.
هذا النطاق مُخصص للاستخدام في أمثلة التوثيق دون الحاجة إلى إذن. هذه ليست خدمة، يُرجى تجنب الاعتماد عليها لأغراض الاختبار والمراقبة.
-o markdown 只打印 Markdown;-bc 表示绕过缓存(bypass cache),保证拿到新鲜页面。官方文档里有时也写成 crwl https://example.com -o markdown(省略子命令 crawl),在 0.9.5 上两种写法都能跑。
小结
- 安装:
pip install crawl4ai==0.9.5,再跑crawl4ai-setup。 - 诊断:
crawl4ai-doctor通过后再写业务代码。 - 最短路径:
async with AsyncWebCrawler() as crawler:然后await crawler.arun(url)。 - 读正文:优先取
result.markdown.raw_markdown;没有该属性时再退回str(result.markdown)。 - 命令行核对:
crwl crawl URL -o markdown -bc。
