5.3 站点分析、爬取策略与合规 本节摘要:动手写代码之前,专业采集有固定动作:摸结构、查协议、探频率、定策略,产出一份带风险项的评估记分卡;同时画清合规红线——可采集的数据范围、不可做的动作、协议在工程与法律上的分量。本节把这套流程模板化,让"先分析后动手"成为肌肉记忆。 前两节解决了"怎么抓"两类疑难,本节退一步解决"该不该抓、从哪下手抓"。写代码前的分析环节最容易被跳过——尤其当需求方在催。但跳过的代价后面都要还:策略错导致返工,红线踩了导致全项目报废。本节把分析动作固化成清单,也把合规讲成工程语言。 四步分析法:从陌生到可执行 第一步,摸结构。 用浏览器把目标站点走一遍:列表页在哪、详情页长什么样、翻页规律是什么、有没有反爬现象。产出是一张页面类型清单。 第二步,查协议。
本节摘要:动手写代码之前,专业采集有固定动作:摸结构、查协议、探频率、定策略,产出一份带风险项的评估记分卡;同时画清合规红线——可采集的数据范围、不可做的动作、协议在工程与法律上的分量。本节把这套流程模板化,让"先分析后动手"成为肌肉记忆。
前两节解决了"怎么抓"两类疑难,本节退一步解决"该不该抓、从哪下手抓"。写代码前的分析环节最容易被跳过——尤其当需求方在催。但跳过的代价后面都要还:策略错导致返工,红线踩了导致全项目报废。本节把分析动作固化成清单,也把合规讲成工程语言。
第一步,摸结构。 用浏览器把目标站点走一遍:列表页在哪、详情页长什么样、翻页规律是什么、有没有反爬现象。产出是一张页面类型清单。
第二步,查协议。 读站点根路径的 robots 协议文件——它声明了各目录对爬虫的开放程度。工程上它还透露策略信息:整站 Disallow 说明站点态度明确,个别路径限制则照单避开即可。
# robots 协议文件示例(节选) User-agent: * Disallow: /search # 站内搜索不许抓 Disallow: /tag/ Crawl-delay: 5 # 请求间隔至少 5 秒 Allow: /public/
Crawl-delay 是站点给出的节奏建议,比你自己猜的礼貌值更有权威性——3.2 节的延迟参数可以直接参照它。把协议声明转成配置的动作可以脚本化,避免人工抄错:
# 从 robots 协议文本里提取延迟建议,写进爬虫级配置 import re def crawl_delay_from_robots(text): m = re.search(r"User-agent:\s*\*\s*(?:[\s\S]*?)Crawl-delay:\s*(\d+)", text, re.I) return int(m.group(1)) if m else None # 假设已取得协议文本 delay = crawl_delay_from_robots(robots_text) settings_hint = {"DOWNLOAD_DELAY": max(1.0, float(delay or 1.0))} # Crawl-delay 5 → DOWNLOAD_DELAY 5.0,未声明则落到保守默认
第三步,探频率。 用最低成本试探目标站的容忍度:几十个请求的小样本,观察响应延迟是否随请求量爬升、是否出现 429。4.3 节的摸底试跑在这里正式执行。
第四步,定策略。 综合前三步产出采集策略:抓什么、按什么顺序、多快、失败怎么办。策略落在 Spider 结构(第 2 章)、节奏参数(4.3 节)与失败策略(4.4 节)三处。
| 维度 | 观察点 | 低风险 | 高风险 |
|---|---|---|---|
| 结构复杂度 | 页面类型数、层级深度 | 单层列表 | 多层动态加登录 |
| 协议限制 | robots 与站点条款 | 无限制 | 明确禁止或延迟要求 |
| 频率敏感度 | 试探响应延迟爬升 | 平稳 | 快速 429 或封 IP |
| 数据敏感性 | 公开程度、个人信息的占比 | 公开聚合数据 | 含个人隐私或付费内容 |
四项里有任何一项高风险,策略就要写明缓解措施:结构复杂配渲染预算,协议限制按单避让,频率敏感配节流加退避,数据敏感做脱敏与最小化采集。

合规不是嘴上说说,每条底线都有对应的工程动作。底线一(隐私)对应字段设计的最小化:抓之前先问每个字段"用途是什么",答不上来的不进 Item——这正好接上 2.4 节"Item 是契约"的观点,契约里写不下用途的字段就不该存在。底线二(秩序)对应 4.3 节的节奏控制与 4.4 节的失败退避。底线三(权属)对应来源留痕:Item 里保留来源地址与采集时间(2.4 节的 crawled_at 字段),数据出问题时可追溯。
一个高频的具体问题:"robots 禁止的路径,法律上绝对不能抓吗?"工程上的答案比法律争论务实:它至少是站点明示的意愿,绕过即失去"善意访问"的抗辩基础,商业项目里不应碰;个人学习性质的抓取也建议照单避让,养成习惯的成本远低于风险。
⚠️ 常见坑:把"技术上可行"当成"可以去做"。登录绕过、验证码强破、付费内容抓取,技术上都有教程,工程上都是红线——判断依据不是能不能,而是数据权属与访问秩序。
背景:接手"采集某公开图书站全部书目与价格"的需求,站点从未采集过。走一遍四步法,记录每步的产出。
操作一,摸结构(约二十分钟):浏览器走完站点,产出清单——列表页按分类组织、每分类约三十页翻页、详情页结构统一、站内搜索与标签页存在但不属于本次需求。操作二,查协议(五分钟):robots 声明禁抓搜索与标签目录、Crawl-delay 5 秒——记下两条:需求范围天然避开禁区,节奏按对方给的来。操作三,探频率(半小时):五十页小样本按 5 秒间隔试跑,延迟平稳无 429。操作四,定策略:分类页全量、翻页由规则引擎接管(2.5 节)、详情页加优先级、节奏参数照抄 Crawl-delay。
# 评估记分卡归档示例 站点:books.example.com 日期:2026-08-29 结构复杂度:低(单层列表加详情) 缓解:无需渲染预算 协议限制: 中(禁两目录、延迟 5 秒)缓解:按单避让,参数照抄 频率敏感度:低(试探平稳) 缓解:节流开启即可 数据敏感性:低(公开书目数据) 缓解:字段最小化,仅取需求清单 结论:可执行;节奏为硬约束,工期按延迟 5 秒估算
结果与解读:工期估算里延迟是硬约束——四千页乘 5 秒再除以单域并发 2,纯节奏时间就要约两小时四十分,这个数字写进了排期,避免了"为什么这么慢"的后续争议。变式:若试探时出现延迟爬升,敏感度升为高风险,策略里要加 4.4 节的退避与降速预案,工期另加缓冲。
问:数据是公开的,是不是就能随便采? 公开只解决"能不能看到",不解决"能不能批量拿、拿来做什么"。公开数据仍受访问秩序与用途约束——批量采集对服务造成的压力、数据二次使用的边界,都独立于"是否公开"存在。
问:抓到的数据能转卖或公开分享吗? 看权属与条款,不看技术可行性。多数站点的数据条款禁止未经授权的再分发;商用场景先过法务再动手,个人学习用途也应注明来源。
问:对方没有 robots 文件,是不是等于默许? 不是。没有声明只是没有明示禁止,访问秩序与条款仍然适用。把"没有禁止"读成"默许",是工程里最一厢情愿的推理。
到站章收尾。旅程还剩回程与远行:下一章 Item 入库、工程部署、走向分布式与生态。