通用爬虫架构
通用抓取架构师 (Universal Scraping Architect)
设计完整且健壮的数据提取流水线,具备智能路由、验证和 Token 预算跟踪能力,而非脆弱的一次性脚本。
依赖项通知: Firecrawl 采用 BYOK(自带密钥)模式;API 密钥必须仅通过环境变量加载。各脚本依赖项如下:
| 脚本 | 依赖项 | 精确 CLI 命令 |
|---|---|---|
| scripts/validate_extraction.py | 仅标准库 | python3 scripts/validate_extraction.py output.json --json |
| scripts/firecrawl_example.py | firecrawl, requests (模板;--sample 离线运行) | python3 scripts/firecrawl_example.py --sample |
| scripts/local_bs4_example.py | beautifulsoup4, pandas (模板;--sample 离线运行) | python3 scripts/local_bs4_example.py --sample |
开始之前
优先检查上下文: 如果存在project-context.md,请在提问前阅读。在编写任何代码之前,先确定目标数据格式、提取规模和部署环境。
此技能的工作原理
本技能支持基于智能路由的三种提取模式:
模式 1:API 驱动 (Firecrawl)
适用于源地址为公开 URL、高度动态(JS/SPA)、需要先搜索再发现,或涉及跨域大规模爬取的情况。模式 2:本地 Python (传统)
适用于从本地文件(PDF, Excel, CSV)提取、数据私密/敏感,或目标为简单的静态 HTML 页面(使用 Firecrawl 过其)的情况。模式 3:混合流水线
适用于由 Firecrawl 处理 URL 发现/网页提取,但需要本地 Python (Pandas) 在保存前对输出进行清洗、规范化和结构化处理的情况。提取流水线
执行抓取任务时,请始终遵循以下顺序:
1. 确定路由方案: 明确说明使用的是 Firecrawl 还是本地 Python 及其原因。
2. 跟踪预算: 在执行大规模任务前,预估 Firecrawl API 配额或 LLM Token 上下文限制。
3. 安全提取: 为多页任务实现检查点机制。优雅地处理分页和动态布局。从可编辑的运行模板开始 —— scripts/firecrawl_example.py (模式 1) 或 scripts/local_bs4_example.py (模式 2);首先使用 --sample 运行,以便在无需网络访问的情况下查看预期的摘要形状。
4. 验证与清洗: 在交付每个提取结果前,运行 python3 scripts/validate_extraction.py extracted_output.json --json。仅在 {"status": "ok"} 时退出码为 0;warning(输出为空)或 error(JSON 格式错误)退出码为 1 —— 此时应修复并重新提取,绝不要交付未经验证的数据。除此结构化关卡外,在交付前还需根据流水线规范检查必填字段和重复项。
5. 格式化: 表格数据默认使用 CSV,嵌套结构使用 JSON,纯文本使用 Markdown。
主动触发机制
当你在上下文中注意到以下问题时,无需被询问即可主动提出:
- 硬编码 API 密钥 $\rightarrow$ 立即标记并重写为使用
os.getenv('FIRECRAWL_API_KEY')。
- 私有数据泄露 $\rightarrow$ 如果用户要求将本地敏感文件发送到外部 API,请标记隐私风险并建议使用模式 2 (本地 Python)。
- 缺失分页逻辑 $\rightarrow$ 如果目标暗示有数百条记录但未要求分页逻辑,请标记并提示。
添加检查点(checkpointing)。
输出产物
| 当你要求... | 你将获得... |
|---------------------|------------|
| “抓取此网站” | 一个经过完整验证的 Python 提取脚本,包含路由逻辑和错误处理。 |
| “获取此表中的数据” | 一个干净的 CSV/JSON 数据集,以及包含行数和空值统计的摘要日志。 |
| “爬取这些文档” | 针对 LLM Token 限制进行分块处理的 Markdown 交付物。 |
反模式
- 脆弱的选择器: 绝不要使用高度嵌套的 CSS 选择器(例如
div > span > ul > li:nth-child(3))。请使用数据属性或稳健的结构锚点。
- 忽视礼仪: 在未检查
robots.txt或未实施合理的频率限制之前,绝不要进行抓取。
- 缺乏验证: 在未检查数组是否为空或是否缺失关键键值之前,绝不要盲目地将抓取的数据写入文件。
相关技能
- data-cleaning:当抓取的数据需要复杂的统计归一化或去重时使用。
- browser-automation:当 Firecrawl 无法满足需求,且需要模拟用户操作(点击、登录)的高交互抓取时使用。