用途:把网页内容抓取并转换为干净的 Markdown,适合需要网页正文文本的场景。
主要能力:采用三级回退链,按顺序尝试并返回首个成功结果。第一级 Firecrawl(需 FIRECRAWL_API_KEY,可选,缺失则回退);第二级 Jina Reader(免费、无需密钥);第三级 Scrapling(本地无头浏览器,经 pip 自动安装)。每个抓取器在返回成功前会校验输出:内容至少 100 字符,并检测 CAPTCHA/机器人验证页、Cloudflare 过渡页、Jina 错误页等。
使用方式:基本命令为 uv run scripts/crawl.py --url https://example.com --output reports/example.md。Markdown 保存到 --output 指定文件,进度与错误输出到 stderr,成功退出码 0,全部抓取器失败退出码 1。建议始终使用 --output 以避免终端编码问题;未提供时输出到 stdout(Windows 上不推荐)。保存报告时应写入项目根目录的 reports/ 目录,目录不存在会自动创建。可指向自托管 Firecrawl:FIRECRAWL_API_URL=http://localhost:3002 uv run scripts/crawl.py --url https://example.com。
URL 要求:仅接受 http:// 和 https://,其他协议(ftp://、file://、javascript:、裸路径等)直接退出码 1 并报错,不尝试抓取。
域名路由:部分主机名会跳过某些层级。medium.com 及其子域跳过 firecrawl,使用 jina→scrapling;mp.weixin.qq.com 跳过 firecrawl 与 jina,仅用 scrapling;其余走完整三级链。子域按后缀匹配,如 blog.medium.com 命中 medium.com 规则。
测试与依赖:uv run pytest tests/ -v 运行 70 个测试,全部使用 mock,无需网络或密钥。依赖由 uv run 自动安装:firecrawl-py>=2.0、httpx>=0.27、scrapling>=0.2、html2text>=2024.2.26。
限制:仅支持 http/https;抓取效果受目标站点反爬机制影响;Firecrawl 需密钥才能获得最佳效果;具体收费与平台支持情况暂未提供。