TL;DR
- 减少可避免的阻塞始于批准的访问、明确的范围、诚实的识别和降低不必要的请求量。
- 机器人的允许并不是内容许可证,受管控的提供者并不会覆盖网站的访问决策。
- 将授权错误视为停止条件;根据服务器的时间指令处理速率限制,并设定有限的重试预算。
- 在源级别协调工作者的节奏,而不仅仅是在单个任务内部进行休眠。
- 下方的可执行示例故意限制在 example.com 并验证政策、节奏、内容和失败状态,而不是演示规避。
负责任的爬取减少不必要的负载,而不是每一个可能的拒绝
负责任的爬取可以减少由过度重试、意外范围扩展、重复请求和格式错误的集合工作流程造成的可避免的阻塞。它不能保证访问一个拒绝自动收集的源。“不被阻塞地爬取”的目标应该是一个被允许的、可衡量的收集过程——而不是强迫被拒绝的请求成功。
一个爬虫在遭遇拒绝之前可以浪费流量。未规范化的分页链接可以创建重复任务;每个工作者都可以重试相同的不可用资源;浏览器渲染可能会重新加载大量资产,尽管页面从未需要浏览器。这些问题值得独立修复,而不依赖于任何提供者或代理的选择。
Nstdata Crawl 可以将页面获取和有限发现移动到受管控的服务。该应用程序仍然必须执行批准的主机、收集预算和终端结果。爬虫与抓取工具指南 解释了为什么发现和字段提取需要单独的合同。
什么算作可避免的阻塞——以及应该停止工作的情况
可避免的阻塞是与项目可以合法纠正的收集行为相关的拒绝,例如在约定的请求预算内提交速度过快。授权边界则不同。如果访问需要项目没有的权限,正确的反应是停止并获得批准的路径。
爬虫排除协议 定义了爬虫指令,并明确将其与访问授权区分开。在发现之前阅读适用的规则,同时也审查源条款、预期用途和任何书面许可。即使网站的另一部分被允许,也要在不允许的路径上停止。
在决定重试之前对失败进行分类:
| 观察 | 适当的下一步 | 不适当的推断 |
|---|---|---|
| 需要身份验证或禁止访问 | 停止并审查批准的访问路径 | 每个拒绝都是暂时的网络错误 |
| 速率限制响应 | 遵循时间指令并减少提交压力 | 另一个身份授予继续的权限 |
| 临时服务过载 | 在有限政策下延迟 | 立即从每个工作者重试 |
| 资源缺失 | 记录该资源的缺失 | 一个项目在现实世界中必须不可用 |
| 意外成功页面 | 隔离并检查源身份/内容 | HTTP 成功证明提取成功 |
这些是操作规则,而不是法律建议,也不能替代特定源的协议。如果项目对授权不确定,则在解决该不确定性时保持收集暂停。
详细教程
下面的实际工作流程从授权开始,并以接受的记录结束。它将范围、请求调度、获取结果和内容验证分开,以便失败不会成为无声的数据更改。
方法 1:在发起请求之前减轻工作负载
第 1 步:定义批准的人群
列出允许的来源、路径、输入 URL 类型、预期字段、最大页面和停止条件。在提交时拒绝未包含在该合同中的 URL,而不仅仅是在它们进入队列后。不要将用户提供的 URL 接受进无限制的获取器;生产系统也需要网络级保护,以防内部或其他不被允许的目的地。
在满足任务时使用经过授权的馈送、导出或 API。一个被允许的增量源可以比优化一个大规模不必要的爬取更有效地减少收集工作。 提供了有用的上下文,帮助发现需要保持限制的内容。




