网页精准抓取器
> 普通抓取拿回一堆 HTML 垃圾。
> 这个引擎输出精准正文——知道什么页用什么武器,失败了知道为什么和下一步换什么。
Use when(什么时候用我)
- 抓取网页正文/结构化数据(价格/新闻/列表/详情)
- 基础 requests 拿不到内容(JS 渲染/需登录/反爬)
- 动态页面(SPA/无限滚动/懒加载)
- 需要抓取强反爬站点(视频/社交/电商)
- Agent 需要实时网页信息做决策
Triggers include
「网页抓取」「抓取正文」「爬虫」「页面提取」「动态渲染」「CDP」「反爬」「数据采集」「实时信息」「登录抓取」「多标签页」
决策树:什么页用什么武器
目标页面
├─ 静态内容(HTML里就有正文)
│ → requests + 正确 UA/Referer → 解析正文
├─ JS 渲染(requests 拿到空壳)
│ → CDP 驱动浏览器(复用已登录会话)→ 等渲染完成 → 提取
├─ 强反爬(403/风控/验证码)
│ → Referer+UA 对策 → Cookie 复用 → 降频重试 → 如实报告"被反爬拦截"
└─ 需登录
→ 复用用户已登录的浏览器会话(CDP 9223 端口)→ 不碰密码
铁律:每一步失败都输出失败原因(HTTP状态/风控特征/超时环节),不猜、不编造抓到的内容。
实战踩坑实录(Pro 独有·生产系统验证)
1. 强反爬站的下载对策(视频/附件类)
- 裸 urllib 直接 400——必须带
Referer: <站点域名>+ 正确 UA - 视频/音频与页面是两条独立流,分开处理
- Cookie 要从已登录会话取,不要硬编码
2. CDP 连接超时的降级
- playwright
connect_over_cdp在 25+ 个 target 时可能超时 180 秒 - 降级方案:直接用原生 WebSocket 连 CDP 端口(
/json拿 target →Runtime.evaluate)——秒级返回 - 多 frame 页面:内容可能在子 frame——先列 frames 再定位
3. 动态页的"等"
domcontentloaded≠ 内容就绪——SPA 需等数据接口返回- 方法:轮询关键元素出现 / 监听网络响应 / 固定等待+重试
4. 提取正文的三层策略
<article>/ 正文类选择器 → 文本密度最高的块 → 全文兜底(标注"未精准提取")
与普通爬虫的区别
| 能力 | 普通爬虫 | 本引擎 |
|---|---|---|
| 动态渲染 | ❌ | ✅ CDP 驱动 |
| 反爬对策 | 无系统方法 | ✅ Referer/UA/Cookie/降频体系 |
| 失败诊断 | 报错完事 | ✅ 输出失败原因+下一步武器建议 |
| 已登录会话 | 需存密码 | ✅ 复用 CDP 已登录浏览器 |
| 多 frame | 漏内容 | ✅ frame 枚举定位 |
安全与合规红线
- 遵守 robots.txt 与站点服务条款——不做规避登录墙的破解
- 不抓个人隐私数据(身份证/手机号/住址)
- 抓取频率自律(降频重试,不打崩对方服务)
- 抓取结果注明"抓取时间+来源URL",过期数据不复用
文件结构
web-precise-fetch/
├── SKILL.md # 本文件
├── references/
│ └── fallback-matrix.md # 反爬对策矩阵与降级决策表
└── scripts/
└── fetch_check.py # 抓取诊断(输入URL→输出该用哪种武器)
版本历史
- v1.0.0(2026-10-15):首发。决策树+四大踩坑实录+三层正文提取。