~/blog/web-scraping-best-practices-2026

2026 年网页抓取最佳实践:一线工程师指南

web-scrapingbest-practicesdata-extractionarchitecture

在构建并维护 15 款生产级爬虫、服务超过 3,100 位用户、成功率保持 >99% 之后,以下是真正重要的实践经验。

架构:把爬虫当管道来设计,而不是脚本

我见过最大的错误,就是把爬虫当成单步骤流程。生产级爬虫其实是数据管道:

  1. URL 发现——找到要抓取的目标(sitemap、分类页、搜索、API)
  2. 请求执行——通过恰当的重试与轮换机制获取数据
  3. 解析——从原始响应中提取结构化字段
  4. 规范化——清洗、校验并统一输出格式
  5. 存储——写入数据集、数据库或下游系统

每一步都应该可以独立测试、独立重试。当 Sephora 修改商品详情页布局时,只需要更新第 3 步——管道的其余部分保持不变。

永远优先选择 API,而非 HTML 解析

在写下第一个 CSS 选择器之前,先检查目标网站是否具备:

  • 公开 API——有文档记录、返回 JSON 的端点
  • 私有 API——在浏览器 DevTools 中可见的 XHR/fetch 调用
  • GraphQL 端点——越来越常见,往往开启了 introspection(内省)
  • 内嵌 JSON——HTML 中的 __NEXT_DATA__window.__INITIAL_STATE__ 或 JSON-LD

API 响应结构化、带版本号,比 HTML 布局稳定得多。我的 Sephora 爬虫会把每一个网页 URL 都转换成 API 调用——从未因为前端改版而失效过。

代理策略:与防护级别相匹配

不是每个网站都需要住宅代理。以下是我的决策框架:

防护级别代理类型示例网站
无 / 基础数据中心代理大多数 Shopify 商店、小型网站
速率限制轮换数据中心代理中型电商、内容类网站
指纹识别住宅代理Sephora、Farfetch 等知名品牌
高级 WAF住宅代理 + TLS 指纹伪装Akamai、Cloudflare 企业版

核心洞察:代理成本随防护级别同步上升。不要在只检查 IP 信誉的网站上浪费钱购买住宅代理。我的 Shopify 爬虫用数据中心代理就能正常工作,因为 Shopify 的默认防护非常薄弱。

会话管理决定一切

60% 和 99% 成功率之间的差距,往往就在于会话管理:

  • 轮换的是会话,而不只是 IP——用新 IP 搭配旧 cookie 反而显得可疑
  • 预热会话——在访问商品页之前先访问首页
  • 遵守速率限制——5 个并发请求跑通,胜过 50 个并发被封
  • 指数退避——按 1 秒、2 秒、4 秒、8 秒的间隔重试,而不是立即重试

我的 Sephora EU 爬虫通过自动刷新与指数退避来管理访客令牌,维持着与真实浏览模式相符的持久会话。

规范化你的输出

抓取到的原始数据往往很杂乱,需要对一切进行规范化:

价格

以整数形式存储(单位为美分,而非美元)。$29.99 会存为 2999。这样可以避免浮点精度误差污染下游财务数据。我的每一个电商爬虫都遵循这一约定。

URL

始终存储绝对 URL,禁止使用相对路径,在提取阶段就完成解析。

日期

使用 ISO 8601 格式(2026-04-01T00:00:00Z),并始终携带时区信息,禁止存储按地区习惯格式化的日期。

文本

去除多余空白,规范化 Unicode 编码,并明确 HTML 处理策略(去除标签还是保留格式)。

错误处理:预设失败会发生

生产级爬虫会持续遭遇失败——问题在于失败得是否体面。我的做法:

1Request fails (network error, timeout, 4xx/5xx)
2  → Retry with exponential backoff (up to 5 attempts)
3    → Rotate session/proxy on retry
4      → Log failure with full context if all retries exhausted
5        → Continue processing remaining URLs (don't crash the batch)

按 URL 模式追踪成功率。如果 /category/* 页面的成功率突然跌破 90%,多半是网站改了什么——这样你能在用户反馈之前就先发现问题。

监控与告警

没有监控的爬虫,迟早会在无人察觉的情况下悄悄失效。需要追踪:

  • 成功率——按每次运行和每种 URL 模式统计
  • 输出数量——骤降往往意味着出了问题
  • 数据质量——空字段、异常值、schema 违规
  • 成本——代理用量、计算时间、存储空间

我的所有 Apify Actor 都会暴露这些指标。一旦成功率下滑,我会在几小时内收到通知——往往早于任何用户察觉。

从简单开始,按需增加复杂度

我构建的每一个爬虫,都从能跑通的最简方案开始:

  1. 先用 HTTP + Cheerio(最快、最省钱)
  2. 只有被封锁时才加入指纹伪装
  3. 只有必须渲染 JavaScript 时才加入浏览器渲染
  4. 只有遇到速率限制时才加入代理轮换

我的 Ulta 爬虫纯用 Cheerio 实现——完全不需要浏览器。我的 Universal Web Printer 则使用 Playwright,因为它必须渲染 JavaScript。为任务选择合适的工具。


这些都不是纸上谈兵的理论——而是从处理数百万级请求的生产级爬虫中提炼出来的实战经验。如果你需要一个按这些实践标准打造的定制爬虫,联系我

whoami
Richard Feng
爬虫工程师,12+ 年经验。专注构建面向 AI 的生产级爬虫,输出干净、RAG 就绪的 JSON。

相关文章

读懂反爬虫防护:2026 年哪些方法依然有效

深入解析现代反爬虫系统——Cloudflare、Akamai、Datadome——以及生产级爬虫中实际使用的合规绕过技术。

需要将这些数据变成干净的 JSON?

浏览爬虫目录,或聘请我为你的数据源定制专属提取工具与 RAG 管道。

浏览工具 获取定制数据