🧭 解决思路
ICP Skills 把「人肉点验证码查备案」变成「一行命令查备案」,背后是一条刻意设计的数据获取链路。本文讲清楚它如何做到。
🔗 总体链路
调用方 ICP Skills 数据源
┌──────┐ company= ┌────────────────────┐ API ┌─────────┐
│ CLI │ ───────────▶ │ 1. 输入归一化 │ ──────▶ │ 创宇盾 │
│ SDK │ │ 2. 凭证选择/轮换 │ │ (主) │
│ HTTP │ │ 3. 限速/重试 │ └─────────┘
└──────┘ │ 4. OCR 突破验证码 │ 页面 ┌─────────┐
▲ │ 5. 结果聚合/去重 │ ──────▶ │ 工信部 │
│ │ 6. 缓存 │ │ (补) │
└── 结构化结果 ◀── └────────────────────┘ └─────────┘🧱 六个关键设计
1️⃣ 输入归一化
用户输入五花八门:「X 科技有限公司」「x科技」「X科技有限公司(北京)」。ICP Skills 在查询前做一层归一化:去括号、统一全角/半角、剥离地域前缀、公司类型别名映射,让"近义词"也能命中。
2️⃣ 凭证选择与轮换
创宇盾等数据源对单凭证有配额。ICP Skills 内置凭证池:
- 支持配置多组 API Key
- 按配额余量 / 失败次数自动选择
- 单凭证触发限速后自动切换,避免硬中断
详见 🔑 凭证管理。
3️⃣ 限速与重试
- 令牌桶限速,按数据源独立配额
- 指数退避重试,区分「可重试错误」与「终态错误」
- 见 🛡️ 反爬与限速
4️⃣ OCR 突破点选验证码
部分备案查询页面会弹「请按顺序点选文字」的点选验证码。ICP Skills 内置 👁️ 点选 OCR 集成:
- 截取验证码图片
- 调用点选 OCR 接口识别文字 + 坐标顺序
- 模拟按顺序点击
- 失败则重试,超过阈值降级
5️⃣ 结果聚合与去重
一次公司查询可能从多个源、多次分页拉回大量记录。ICP Skills:
- 按「域名 + 主体 + 备案号」三元组去重
- 主体信息多源交叉校验,冲突时按可信度排序
- 见 🔄 数据聚合
6️⃣ 缓存
- 查询结果带 TTL 缓存(备案信息变化慢,缓存性价比高)
- 缓存可禁用、可指定后端(内存 / 文件 / Redis)
- 见 📦 cache 包
🧭 为什么是「创宇盾 + OCR」而非单一方案
| 方案 | 优点 | 短板 |
|---|---|---|
| 纯爬工信部页面 | 数据权威 | 验证码 + 限速,难自动化、易封 |
| 纯创宇盾 API | 结构化、稳定 | 需付费凭证,覆盖未必 100% |
| 创宇盾为主 + OCR 突破页面 + 工信部补全 | 覆盖广、可自动化、可降级 | 需多凭证管理 |
ICP Skills 选第三条:以结构化 API 为主路径保证效率与稳定性,以 OCR 突破的页面查询为补全路径保证覆盖率,自动降级保证可用性。