网页抓取 vs 爬虫2025 技术领导者实战指南
掌握 2025 年网页抓取和爬虫之间的技术和战略差异。涵盖现代架构、反机器人防御(JA3/JA4)、AI/LLM 考量、合规性(CFAA、robots.txt)、KPI 和自建与购买决策。面向工程的指导,帮助数据团队应对 AI 爬虫时代。
如果就是几十行数据、不到 10 个 URL,直接让 AI 编码代理(Claude Code、Codex)或浏览器代理跑一下就够了,不用一开始就搭完整流水线。
爬取 = URL 发现与变化监控。抓取 = 从已知页面提取结构化数据。现代网站需要无头浏览器、反机器人规避(JA3/JA4)以及地理感知的移动代理。生产环境需要:KPI(覆盖率 ≥92%、封禁率 ≤5% 这类数据是很多团队实践里的参考区间/目标值)、合规态度(CFAA、robots.txt(爬虫排除协议))以及自建 vs 购买分析。新变化:AI 代理可以零自定义代码处理一次性/小批量抓取。
先说重点
爬取就是系统化地发现 URL、定期重访——建个地图,知道有哪些页面、哪些改了。抓取是从已知页面类型里提取结构化数据(价格、库存、描述这些)。
为什么现在要分清楚:JavaScript 密集的网站得用真浏览器渲染,现代反机器人系统(JA3/JA4 指纹、行为信号)越来越精准,AI 爬虫正在改变整个游戏规则和发布者的控制方式。
好的流程应该是:爬取 → 筛选目标 → 渲染 → 提取 → 验证 → 入库 → 告警。配合明确的 KPI、SLO 和站得住脚的合规立场来执行。
一句话总结:用会话化的移动/住宅代理出口(稳定身份、能定位到 ZIP/城市、按域限并发)通常能大幅降低 JS 密集型电商网站的封禁率。
1不废话的定义
爬取(Crawling)
跨域或语料库的系统化 URL 发现和刷新。输出 URL 图、变化信号和重访优先级。Google 管这个叫"爬取预算"——一个机器人在给定网站上能爬、想爬多少内容。
目标:知道有哪些页面、哪些改了、什么时候该再检查一次。
抓取(Scraping)
从已知页面类型中有针对性地提取标准化字段(价格、库存、卖家名、SKU)。输出干净、结构化的记录,随时能拿来分析或设告警。
目标:从特定页面拿到准确、标准化的数据。
典型流水线
爬取 → 过滤 → 抓取 → 质量检查 → 发布
⚠️ robots.txt(爬虫排除协议)是指导,不是授权
robots.txt(爬虫排除协议)是一个自愿标准,不是访问控制。它表明意图和规范,但不提供技术强制。要真正排除访问,得用认证、付费墙或 WAF 规则。具体还要看你所在地区的法规和自家法务意见。
2现代 Web 现实(什么会破坏天真的计划)
JS 渲染内容
React、Vue、Next.js 网站通过水合 DOM 在加载后渲染价格和产品详细信息。无限滚动和动态过滤器很常见。这个时候就得用真实的无头浏览器(Playwright、Puppeteer)来保证可靠性。
反机器人 ML 与指纹识别
像 Cloudflare、Akamai 和 HUMAN Security(前身为 PerimeterX)这类现代机器人管理器用的是 TLS/HTTP 指纹识别(JA3/JA4 风格)和行为 ML;Cloudflare 公开记录了 JA4。你的流量配置文件(TLS 协商、HTTP/2 模式、请求间时间)都是信号。
地理与身份门控
内容因 ZIP/区域和用户状态而异。会话、Cookie 和仅限会员视图很重要。这个时候需要带有地理定位的住宅/移动代理来保证准确性。
AI 爬虫与发布者控制
越来越多的发布者通过 robots.txt(爬虫排除协议)默认封锁 AI 机器人(GPTBot、CCBot),像 Cloudflare AI Labyrinth 这样的蜜罐,以及"按爬取付费"实验。访问经济正在转变。
规范混乱与重复
UTM 参数、分面过滤器、会话 ID 和 A/B 测试变体会造成 URL 爆炸。这个时候需要 URL 标准化并了解 <link rel="canonical"> 标签。
3爬取停止和抓取开始的地方
需要跨域发现/变化监控?
从爬取开始:前沿队列、按站点限速、去重、变化检测
已经有目标 URL 并需要清洁事实?
直接进行抓取:渲染、选择器、标准化、质量门控
需要关于竞争变化的告警和仪表板?
爬取 → 抓取 → 验证 → 告警循环,配合 KPI 监控
决策矩阵
| 场景 | 从哪里开始 |
|---|---|
| 未知 URL 范围,需要清单 | 爬取 |
| 已知产品 URL,提取定价 | 抓取 |
| 监控类别以查找新列表 | 爬取 + 抓取 |
| 实时竞争价格告警 | 抓取 + 告警 |
4AI 时代的小批量抓取:通用代理何时足够
2025 的游戏规则改变者
IDE 集成的编程代理(Claude Code、OpenAI Codex)和新兴的浏览器代理可以端到端完成一次性或小批量 Web 数据提取——通常无需专门工具和最小设置。如果就是几十行数据、不到 10 个 URL,直接让 AI 编码代理/浏览器代理临时跑一下就够了,不用上整套爬取→抓取→验证流水线。
何时效果好(选择这些条件)
范围
≤100 行,≤10 个目标 URL(或单个模板页面类型)
复杂度
轻量级 JS 或可预测的 DOM;无繁重登录/反机器人;ZIP/地理差异不关键
延迟
人工参与可以接受;你只需要今天的 CSV——不是服务
治理
抓完附上截图 + CSV 作为审计线索/复现依据
一次性需求
竞争现场检查、供应商列表组装、研究脚注、PoC 验证
典型工作流程(无需定制应用构建)
1"临时脚本"模式
提示 Claude Code/Codex:(a) 检测页面结构,(b) 编写短 Playwright/Python 脚本,(c) 运行,(d) 返回 CSV + 截图。
用微调重新运行;之后丢弃。两家供应商都强调跨终端/IDE/Web 的代码生成 + 代理执行。
2"直接浏览器代理"模式
使用代理浏览器包装器(例如 Browser Use),LLM 通过高级指令导航、点击和提取字段。
非常适合半结构化页面和小量级。
3"LLM 辅助解析"模式
粘贴 HTML 或页面块;让模型标准化为模式(例如 Product/Offer)并验证单位/货币。
适合 10-50 行,可靠性胜过速度。
质量与合规护栏(每次运行都使用这些)
证明你看到了什么
为每行捕获渲染的截图;在 CSV 中包含 URL、时间戳、区域/ZIP
最小化风险
优先选择公共页面;避免绕过认证;在适用的情况下尊重 robots.txt(爬虫排除协议)和条款;如果可用,优先使用官方 API
验证字段
区域感知的数字/货币;合理性检查(例如 offer_price ≤ list_price);丢弃低置信度解析
按站点限速
添加延迟,按域限并发(代理可能点击太快),并在重复挑战时停止
安全与审计
- 每次运行隔离浏览器配置文件/容器
- 最小权限凭证;切勿存储在提示中
- 每行截图 + HAR 文件用于审计线索
- 固定代理和浏览器版本以实现可重现性
适用 vs 不适用
| 适用 | 不适用 |
|---|---|
| 临时研究、投资者/高管简报数据 | 持续订阅或 SLA(新鲜度、正常运行时间) |
| 原型价格/可用性检查 | 重型反机器人、旋转卖家/购买框逻辑 |
| 跨几个 URL 的 20-100 行 | 规模化的多站点覆盖、去重/规范化需求 |
| 带截图的人工监督提取 | 需要变更管理和审计的受管流水线 |
升级标准(何时超越 AI 代理)
→你需要新鲜度保证或数千行
→页面因 ZIP/区域而异,需要会话持久性
→封禁率攀升;这个时候需要稳定的身份(例如专用移动出口)
→利益相关者要求告警精度指标和 SLO——这个时候需要一个流水线
为什么现在可能(证据快照)
编程代理
Anthropic 强调 Claude 在复杂代理工作流程中"最擅长使用计算机";Claude Code 跨 CLI/IDE 发布
Codex 升级
OpenAI 的 Codex 更新宣传通过 CLI 和多表面执行实现更快、更可靠的任务处理——非常适合临时抓取器
浏览器代理
最近的论文和 OSS(例如 BrowserAgent、Browser Use)显示 LLM 可靠地控制 Playwright 以类似人类的序列导航、点击和提取
LLM 辅助解析
实践者指南记录了使用 LLM 来帮助进行 HTML 解析/提取,适用于适度的量级,无需建立基础设施
底线
如果你的需求是小型、受监督和一次性的,让编程代理或浏览器代理今天完成它,并存档截图 + 输出。当你需要可重复性、规模、地理/会话现实或 SLA 时,升级到完整的爬取 → 抓取 → 验证流水线,配合会话化的移动/住宅代理出口和 KPI。
5参考架构
5.1 爬取(发现与新鲜度)
📥 输入
- 种子 URL、XML 站点地图、RSS/Atom 订阅、内部提示
- 站点地图遵循大型网站索引的协议标准
🗂️ URL 前沿
- 按新鲜度、链接重要性、历史变化率排名的优先队列
- 实现按站点限速:按主机并发上限、抖动、遵守 robots.txt(爬虫排除协议)
🔍 去重与规范化
- 标准化查询字符串(删除跟踪参数、排序键)
- 遵循
<link rel="canonical">提示 - URL 指纹识别以避免重新爬取相同内容
🔄 变化检测
- 内容哈希(清理后的 HTML 的 SHA-256)
- HTTP ETag 和 Last-Modified 头
- 高价值页面的 DOM 区域差异
📤 输出
URL 图 + 变化标志 → 排队目标抓取
5.2 抓取(精度与标准化数据)
🎭 渲染模式
- 用于静态页面的 HTTP 获取(新闻、博客)
- 用于 JS 渲染的电商网站的无头 Playwright/Puppeteer
- 持久化截图用于审计线索和质量检查争议
🔐 身份与声誉
- 每个实体的会话重用(一个会话 = 一个身份)
- 每个会话的稳定指纹(TLS、HTTP/2、user-agent 一致性)
- 仅在软封禁时轮换以最小化 JA3/JA4 异常
- 更稳的做法是选择会话化的移动/住宅代理出口,而不是嘈杂的共享池
📊 标准化
- 映射到 Schema.org 类型:Product、Offer、PriceSpecification
- 始终存储
priceCurrency(USD、EUR、GBP) - 区域感知的数字解析(逗号 vs 句点)
✅ 质量门控
- 类型化验证器(价格必须是正十进制,SKU 字母数字)
- 语义交叉检查(报价价格 ≤ 标价)
- 解析置信度评分(基于字段完整性的 0-100%)
📤 输出
标准化记录 + 截图 + 置信度分数 → 数据仓库/告警引擎
6KPI、SLO 与运营仪表板
没有指标,抓取项目会漂移成黑盒。跟踪这六个核心 KPI 并设置 SLO 阈值,以便操作可以自主运行。
| KPI | 定义 | 很多团队实践里的参考区间 |
|---|---|---|
| 覆盖率 | 每个间隔内有 ≥1 个有效样本的跟踪实体 % | ≥92% |
| 新鲜度 | 自上次有效样本以来的中位数分钟数 | ≤180 分钟(A 级) |
| 封禁率 | 导致 403/429/验证码/挑战的请求 % | ≤5% |
| 解析置信度 | 通过所有验证器的记录 % | ≥92% |
| 告警精度 | 通过截图/结账验证的真阳性率 | ≥85% |
| 每样本成本 | 基础设施 + 代理成本 ÷ 有效行 | 跟踪趋势 |
📐 公式
覆盖率 = tracked_entities_with_valid_sample / total_tracked_entities
封禁率 = (403 + 429 + challenge pages) / total_requests
解析置信度 = valid_records_passing_all_validators / total_records
新鲜度 = median(now − last_valid_sample_ts)
现实提示:即使采用最佳实践,也要预期 2-5% 的封禁率。完美主义导致过度工程化;专注于一致的趋势监控。
💡 运营仪表板提示
按域和出口地理位置绘制封禁率和新鲜度。封禁率峰值通常与新的反机器人部署或 IP 声誉问题相关。当封禁率超过你设定的阈值时设置告警。
7合规性与法律立场
⚖️ 法律免责声明
本节提供背景信息,而非法律建议。请就你的管辖区和用例咨询合格的律师。法律因国家而异,合同条款很重要,执法态度会演变。
CFAA 与公共 Web 数据
在 Van Buren v. United States(2021)和 hiQ Labs v. LinkedIn(第九巡回法庭,2022)之后,抓取公开可访问的数据不太可能构成 CFAA 违规。然而,合同/ToS 违规、反规避主张和州法侵权理论(动产侵权)仍然是潜在风险。具体还要看你所在地区的法规和自家法务意见。
最佳实践:避免凭证区域、伪造(虚假陈述身份)或技术规避(绕过付费墙)。停留在公共区域并尊重技术控制。
Robots.txt 与 REP
robots.txt(爬虫排除协议)现在是一个 IETF 标准(RFC 9309),但仍然是一个自愿标准,不是访问控制。违反 robots.txt(爬虫排除协议)可能会增加风险(合同、规范、声誉),但本身并不构成未经授权的访问。具体还要看你所在地区的法规和自家法务意见。
最佳实践:将 robots.txt(爬虫排除协议)视为你的风险计算和善意立场的一部分。如果你必须绕过,记录业务理由和法律审查。
AI 爬虫与发布者控制
许多发布者默认通过 robots.txt(爬虫排除协议)封锁 GPTBot、CCBot 和类似的 AI 爬虫。Cloudflare 提供 AI Labyrinth 蜜罐来捕获不合规的机器人。报告称某些 AI 爬虫忽略 robots.txt(爬虫排除协议)。发布者正在试验按爬取付费许可。预期规范演变、验证列表和潜在的监管审查。
数据最小化与保留
- 避免收集特殊类别(健康、财务、超出必要性的 PII)
- 仅存储你为定义的业务目的所需的内容
- 设置保留时间表和清除政策
- 在适用的情况下,尊重删除请求和 GDPR/CCPA 数据主体权利
📸 可审计性
保留每次抓取的请求元数据(时间戳、URL、IP、user-agent、状态码)和截图。在争议中,截图证明了公开显示的内容以及何时显示。保留期:最少 30-90 天。
⚡ API 优先原则
可用时优先使用官方 API;仅在 API 范围/配额阻止你的用例时才进行抓取。API 提供稳定性、记录的模式和合规性清晰度。抓取应该是你的后备方案,而不是默认方案。
8你必须计划的反机器人防御
🔍 信号层
- JA3/JA4:TLS 和 HTTP/2 指纹
- 浏览器功能:WebGL、Canvas、AudioContext 支持
- Cookie 历史:缺少跟踪 cookie 是可疑的
- 时间:请求间模式、滚动速度、鼠标移动
🤖 行为 ML 模型
Cloudflare Bot Management、Akamai Bot Manager、PerimeterX 使用 ML 实时评分流量。它们学习"正常"模式并标记异常值。
缓解措施:调整并发、添加随机延迟、重用会话、避免嘈杂的共享代理池。
🧩 挑战与蜜罐
- hCaptcha/Turnstile:可见或不可见挑战
- 诱饵端点:只有机器人才会跟随的隐藏链接
- AI Labyrinth:Cloudflare 的 AI 爬虫无限循环陷阱
响应:维护挑战预算(例如,每小时解决 ≤5 个验证码),实施后备路由,在挑战循环时告警。
🔄 轮换策略
反模式:按固定计时器轮换(每 N 个请求)。
最佳实践:在封禁(软或硬)时轮换。保持每个实体身份稳定,以减少行为异常和 JA3/JA4 流失。
🚨 现实检查
现代反机器人系统很复杂。预期 0% 封禁率是不现实的。即使使用最佳基础设施,也要预算 2-5% 的封禁率。按域和地理位置跟踪封禁率,并在超过阈值时设置告警。
9AI 时代:LLM、RAG 和 LLM 感知爬虫
LLM 辅助提取
大型语言模型(GPT-4、Claude)可以发现提取模板、处理模糊字段提取并对抓取的数据执行质量检查。然而,LLM 是非确定性的,可能会产生幻觉。
最佳实践:使用 LLM 进行模板发现和模糊提取,但使用确定性验证器对输出进行门控。切勿信任原始 LLM 输出用于财务或合规关键字段。
代理浏览权衡
LLM 驱动的浏览器代理可以导航复杂的工作流程(多步骤结账、动态表单)。然而,它们很慢(每个动作 10-30 秒)且昂贵(GPT-4 API 调用累加)。
用例适合性:保留代理浏览用于边缘情况(验证码解决、复杂认证流程),而不是每个页面。
RAG 流水线
抓取的数据 → 嵌入 + 向量搜索 → 产品分析或面向客户的助手。检索增强生成(RAG)使 LLM 能够回答基于新鲜、结构化数据的问题。
爬取 → 抓取 → 标准化 → 嵌入(text-embedding-3-small)→ 向量数据库(Pinecone/Weaviate)→ 查询(带上下文的 GPT-4)→ 答案
AI 爬虫与搜索
不少商业意图比较强的查询现在会给出 AI 概览/AI 回答,而且位置通常比较靠前,直接在搜索结果中总结内容,减少了对源站点的点击。你的内容可能会出现在带有归属链接的 AI 生成摘要中。
优化:确保清晰的事实、结构化数据(Schema.org)和值得引用的页面。使内容易于引用和验证。
llms.txt 现实检查
llms.txt 是一个社区提案,用于发出 LLM 友好内容的信号。采用不均匀;视为建议性的,而非强制性的。保留 robots.txt(爬虫排除协议)控制和 WAF 规则以进行实际访问控制。
10成本模型与采购指南
💰 成本驱动因素
- 渲染税:无头浏览器秒数远超仅 HTTP 成本(10-100 倍)
- 封禁税:每次封禁触发重试、备用路由、手动审查——声誉很重要
- 去重节省:URL 规范化和变化检测减少了 30-60% 的浪费抓取
- 调度:队列反压和速率限制使基础设施成本可预测
自建 vs 购买决策矩阵
| 因素 | 内部构建 | 购买供应商解决方案 |
|---|---|---|
| 合规负担 | 完全责任 | 共享/供应商管理 |
| 地理覆盖 | 受基础设施限制 | 全球代理池 |
| 无头需求 % | 高设置成本 | 托管渲染 |
| SRE 容量 | 持续 2-4 个 FTE | 0.5 个 FTE 集成 |
| 生产时间 | 3-6 个月 | 1-4 周 |
📋 供应商 RFP 检查清单
- 出口类型:住宅、移动、专用数据中心?
- 用于稳定身份的会话 API?
- 地理约束:国家、州、ZIP 级别?
- JA3/JA4 稳定性保证?
- 封禁率和新鲜度 SLA 的证据?
- 按域限并发控制(并发、速率限制)?
- 数据审计工件(请求日志、截图)?
11实践者检查清单
爬取准备就绪
- ✓ 种子和站点地图已收集
- ✓ robots.txt(爬虫排除协议)已解析并遵守
- ✓ 规范规则已定义
- ✓ 已设置按主机并发上限
- ✓ 已选择变化检测模式(哈希/ETag/DOM 差异)
- ✓ 已实现 URL 标准化逻辑
抓取正确性
- ✓ 区域感知的数字解析(逗号 vs 句点)
- ✓ 货币与单位提取
- ✓ 选择器冗余(CSS + XPath 后备)
- ✓ 模式不匹配时截图
- ✓ Schema.org 映射(Product/Offer)完成
- ✓ 已实现置信度评分逻辑
声誉卫生
- ✓ 一个会话 = 一个稳定身份
- ✓ 最小化 user-agent 流失
- ✓ 仅在软封禁时轮换(不是固定计时器)
- ✓ 在挑战循环时失败关闭
- ✓ 每个实体持久化会话 cookie
- ✓ 监控 JA3/JA4 指纹
告警质量
- ✓ 已定义业务逻辑(应付总额,而非标价)
- ✓ 抑制卖家翻转时的告警
- ✓ 抑制变体/选项更改时的告警
- ✓ 每个告警附加截图
- ✓ 跟踪告警精度(TP 率)
- ✓ 已配置告警路由规则
12领导、法律与工程的常见问题
爬取竞争对手的公共网站合法吗?
在 Van Buren 和 hiQ v. LinkedIn 之后,抓取公开可访问的数据的 CFAA 风险较低。然而,合同/ToS 违规、反规避风险和州侵权主张仍然存在。避免凭证区域、伪造和技术规避。就你的特定用例咨询律师。具体还要看你所在地区的法规和自家法务意见。
我必须遵守 robots.txt(爬虫排除协议)吗?
robots.txt(爬虫排除协议)现在是一个 IETF RFC(RFC 9309),但仍然是一个自愿标准,不是访问控制。忽视它会增加风险(合同、声誉、规范),但本身并不是未经授权的访问。将其视为你的风险计算和善意立场的一部分。具体还要看你所在地区的法规和自家法务意见。
我们可以避免无头浏览器吗?
有时可以。静态网站(新闻、博客)使用仅 HTTP 获取效果很好。然而,消费者电商、SaaS 仪表板和社交平台大量使用 JS 渲染。一般会需要无头 Playwright/Puppeteer,现代电商抓取里大概 60-80% 都得用。
AI 爬虫总结我们的内容怎么办?
不少商业意图比较强的查询现在会给出 AI 概览/AI 回答,可能会总结你的内容并提供归属链接。针对清晰度、结构化数据(Schema.org)和值得引用的页面进行优化。使内容易于引用和验证。如果需要,考虑对特定 AI 机器人(GPTBot、CCBot)使用 robots.txt(爬虫排除协议)规则。
我们如何处理封禁率峰值?
当封禁率超过 SLO(例如 >5%)时设置告警。按域和出口地理位置调查。常见原因:新的反机器人部署、IP 声誉下降、会话异常。缓解措施:轮换到新鲜的 IP、降低并发、添加延迟、审查 JA3/JA4 指纹。
13术语表
- URL 前沿(URL Frontier)
- 等待爬取的 URL 优先队列,按新鲜度、重要性和变化率排名
- 规范化(Canonicalization)
- 通过删除跟踪参数、排序查询键并遵循
<link rel="canonical">提示将 URL 标准化为单一规范形式 - 解析置信度(Parse Confidence)
- 质量分数(0-100%),指示提取字段的完整性和有效性
- 会话化的移动/住宅代理出口(Sessioned Exit)
- 代理具有稳定身份(IP、TLS 指纹、cookie),跨对同一实体的多个请求
- JA3 / JA4
- TLS 和 HTTP/2 指纹识别方法,根据加密握手和协议细节识别客户端行为
- 爬取预算(Crawl Budget)
- Google SEO 概念:机器人在给定时间段内可以并想要在域上爬取的页面数量
参考文献与延伸阅读
- [Schema.org Product/Offer/PriceSpecification]:电商实体的结构化数据词汇表。参见 schema.org/Product、 schema.org/Offer 和 schema.org/PriceSpecification
- [Google Search Console — 爬取统计]:监控 Googlebot 如何爬取你的网站。参见 Google Search Console 爬取统计报告