第9章 web 机器人
构建爬虫根集、链接规范化、环路与重复避免、机器人HTTP、robots.txt和搜索索引
第9章 web 机器人
“第9章 web 机器人”锁定David Gourley、Brian Totty、Marjorie Sayer、Sailu Reddy、Anshu Aggarwal著,陈涓、赵振平译《HTTP权威指南》,人民邮电出版社,2012年,ISBN 9787115281487;英文原版HTTP: The Definitive Guide,O'Reilly Media,2002年9月,656页,ISBN 1565925092。O'Reilly官方页面确认英文首版的5个正文部分、21章和8个附录;中文版完整印刷目录另含“第六部分 附录”和索引。忠实度分母共586个部分、章、编号节/小节、附录与索引节点。
“第9章 web 机器人”未取得未获授权的完整中文正文;课程以 O’Reilly 官方在线版 与 章级导览 界定首版范围,中文解释、报文、实验和练习均为独立教学重写。现代语义仅以 RFC 9110、RFC 9111 和 RFC 9112 核对差异。
学习目标
- 能解释“第9章 web 机器人”的全部正式节点及其HTTP事务位置。
- 能绘制请求、响应、TCP连接、中间实体和资源状态。
- 能设计单变量实验,验证“每次抓取都有规范URL、访问策略、条件请求、响应处理、去重状态和礼貌限速”。
- 能写出含首版边界、原始报文、故障、恢复和复核人的证据包。
从一条可证伪的HTTP事务开始
先预测:不做规范化和环路检测会无限抓取别名、动态空间并给站点造成过量负载。把预测写成“URL/资源、连接、请求报文、中间实体、响应报文、身份与编码”六行,再运行客户端、代理或服务器。结果不同先定位首个字节或状态偏差。
本页主问题是:构建爬虫根集、链接规范化、环路与重复避免、机器人HTTP、robots.txt和搜索索引。每条消息要注明发送者、接收者、HTTP版本、连接复用、逐跳/端到端首部、主体边界与历史协议状态。
验收不变量是:每次抓取都有规范URL、访问策略、条件请求、响应处理、去重状态和礼貌限速。最终页面正常、状态码200或TLS通道建立都只是局部事实,不能单独证明资源身份、缓存变体、代理转发与证书身份全部正确。
核心词汇与首版边界
↡自动获取页面并从中发现后续链接的Web机器人、↡爬行开始时提供的初始URL集合、↡把等价URL转换为稳定比较形式的过程、↡站点发布给机器人读取的访问排除规则文件、↡把词项映射到文档以支持搜索查询的数据结构
这些词汇固定在2002年英文首版和2012年中译本语境。在“第9章 web 机器人”中,HTTP/2、HTTP/3、OAuth、JWT、SameSite、HSTS和现代CDN行为只作独立比较,不得替换HTTP-NG、Digest、WebDAV、WPAD等首版节点。
核心机制深读
先从爬虫画出事务
构建爬虫根集、链接规范化、环路与重复避免、机器人HTTP、robots.txt和搜索索引。先固定资源身份和请求目标,再标出客户端、中间实体与源服务器,任何优化或安全结论都不能跳过原始报文。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
区分爬虫与根集
爬虫和根集可能在同一事务中协作,但责任、状态位置和失败语义不同。对比正常请求、单个首部变化和单个连接故障,定位首个偏差。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
让URL规范化经过真实中间实体
代理、缓存、网关或隧道会读取、添加、删除或转发不同首部。逐跳记录Via、Connection列出的字段、缓存决策和认证边界。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
验证robots.txt的历史语境
原书写于2002年,以HTTP/1.0、HTTP/1.1、SSL/TLS早期版本和当时Web基础设施为背景。现代实现可做对照,但不能冒充原书节点。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
用全文索引关闭证据门
每次抓取都有规范URL、访问策略、条件请求、响应处理、去重状态和礼貌限速。证据至少包含原始请求/响应、TCP时间线、中间状态、失败注入、恢复动作和第三方复核。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
首版机制逐项深读
第9章 web 机器人
“第9章 web 机器人”的风险包括无限空间、别名重复、站点压力与排序欺诈;停止条件和每主机预算必须成为可审计状态。
9.1 爬虫及爬行方式
处理“9.1 爬虫及爬行方式”要区分 URL 发现、抓取许可、内容获取、重复检测和索引排序;robots.txt 只声明抓取策略,不是访问授权。
9.1.1 从哪儿开始:根集
验证“9.1.1 从哪儿开始:根集”用允许、禁止、重定向和循环四类链接,记录规范化键、抓取频率、响应处理和最终索引项。
9.1.2 链接的提取以及相对链接的标准化
“9.1.2 链接的提取以及相对链接的标准化”的风险包括无限空间、别名重复、站点压力与排序欺诈;停止条件和每主机预算必须成为可审计状态。
9.1.3 避免环路的出现
处理“9.1.3 避免环路的出现”要区分 URL 发现、抓取许可、内容获取、重复检测和索引排序;robots.txt 只声明抓取策略,不是访问授权。
9.1.4 循环与复制
“9.1.4 循环与复制”属于抓取与索引闭环:从种子 URL 发现并规范化链接,以去重键和访问策略避免循环,再将内容特征写入可排序索引。
9.1.5 面包屑留下的痕迹
“9.1.5 面包屑留下的痕迹”在本章用于回答“构建爬虫根集、链接规范化、环路与重复避免、机器人HTTP、robots.txt和搜索索引”。学习时必须把这个名称落到具体报文、连接、中间状态或历史规范,并说明它改变了哪项可观察结果。
9.1.6 别名与机器人环路
“9.1.6 别名与机器人环路”属于抓取与索引闭环:从种子 URL 发现并规范化链接,以去重键和访问策略避免循环,再将内容特征写入可排序索引。
9.1.7 规范化url
“9.1.7 规范化url”统一主机大小写、默认端口、相对路径和安全等价的转义形式,以建立稳定去重键;不能把语义不同的查询参数盲目合并。
9.1.8 文件系统连接环路
“9.1.8 文件系统连接环路”的实验固定请求与响应大小,只改变一项建连、复用、并发或关闭策略,再比较握手数、首字节时间与失败重试。
9.1.9 动态虚拟web 空间
“9.1.9 动态虚拟web 空间”把请求路由到具体站点与版本:Host/地址决定虚拟主机,权限与写入协议控制发布,副本和分发节点必须保持资源身份与版本一致。
9.1.10 避免循环和重复
验证“9.1.10 避免循环和重复”用允许、禁止、重定向和循环四类链接,记录规范化键、抓取频率、响应处理和最终索引项。
9.2 机器人的http
处理“9.2 机器人的http”要区分 URL 发现、抓取许可、内容获取、重复检测和索引排序;robots.txt 只声明抓取策略,不是访问授权。
9.2.1 识别请求首部
“9.2.1 识别请求首部”必须在线路语义中判断:请求方法声明意图,状态码表达处理结果,首部携带元数据,主体边界由明确的报文规则确定。
9.2.2 虚拟主机
“9.2.2 虚拟主机”把请求路由到具体站点与版本:Host/地址决定虚拟主机,权限与写入协议控制发布,副本和分发节点必须保持资源身份与版本一致。
9.2.3 条件请求
验证“9.2.3 条件请求”固定响应字节与缓存键,只改变 Age、寿命或验证器中的一个量,观察新鲜命中、304 再验证和完整回源。
9.2.4 对响应的处理
“9.2.4 对响应的处理”在本章用于回答“构建爬虫根集、链接规范化、环路与重复避免、机器人HTTP、robots.txt和搜索索引”。学习时必须把这个名称落到具体报文、连接、中间状态或历史规范,并说明它改变了哪项可观察结果。
9.2.5 user-agent 导向
“9.2.5 user-agent 导向”由缓存键、当前年龄、新鲜寿命、Vary 维度和验证器共同决定;命中不等于新鲜,过期对象也可能通过条件请求复用。
9.3 行为不当的机器人
“9.3 行为不当的机器人”属于抓取与索引闭环:从种子 URL 发现并规范化链接,以去重键和访问策略避免循环,再将内容特征写入可排序索引。
9.4 拒绝机器人访问
“9.4 拒绝机器人访问”的风险包括无限空间、别名重复、站点压力与排序欺诈;停止条件和每主机预算必须成为可审计状态。
9.4.1 拒绝机器人访问标准
“9.4.1 拒绝机器人访问标准”的风险包括无限空间、别名重复、站点压力与排序欺诈;停止条件和每主机预算必须成为可审计状态。
9.4.2 web 站点和robots.txt 文件
“9.4.2 web 站点和robots.txt 文件”的风险包括无限空间、别名重复、站点压力与排序欺诈;停止条件和每主机预算必须成为可审计状态。
9.4.3 robots.txt 文件的格式
“9.4.3 robots.txt 文件的格式”的风险包括无限空间、别名重复、站点压力与排序欺诈;停止条件和每主机预算必须成为可审计状态。
9.4.4 其他有关robots.txt 的知识
“9.4.4 其他有关robots.txt 的知识”的风险包括无限空间、别名重复、站点压力与排序欺诈;停止条件和每主机预算必须成为可审计状态。
9.4.5 缓存和robots.txt 的过期
验证“9.4.5 缓存和robots.txt 的过期”固定响应字节与缓存键,只改变 Age、寿命或验证器中的一个量,观察新鲜命中、304 再验证和完整回源。
9.4.6 拒绝机器人访问的perl 代码
验证“9.4.6 拒绝机器人访问的perl 代码”用允许、禁止、重定向和循环四类链接,记录规范化键、抓取频率、响应处理和最终索引项。
9.4.7 html 的robot-control 元标签
处理“9.4.7 html 的robot-control 元标签”要区分 URL 发现、抓取许可、内容获取、重复检测和索引排序;robots.txt 只声明抓取策略,不是访问授权。
9.5 机器人的规范
“9.5 机器人的规范”的风险包括无限空间、别名重复、站点压力与排序欺诈;停止条件和每主机预算必须成为可审计状态。
9.6 搜索引擎
验证“9.6 搜索引擎”用允许、禁止、重定向和循环四类链接,记录规范化键、抓取频率、响应处理和最终索引项。
9.6.1 大格局
“9.6.1 大格局”是结构节点,用来组织“构建爬虫根集、链接规范化、环路与重复避免、机器人HTTP、robots.txt和搜索索引”的学习范围;它负责串联相邻机制与证据,不把目录标题本身当作知识解释。
9.6.2 现代搜索引擎结构
“9.6.2 现代搜索引擎结构”属于抓取与索引闭环:从种子 URL 发现并规范化链接,以去重键和访问策略避免循环,再将内容特征写入可排序索引。
9.6.3 全文索引
“9.6.3 全文索引”属于抓取与索引闭环:从种子 URL 发现并规范化链接,以去重键和访问策略避免循环,再将内容特征写入可排序索引。
9.6.4 发布查询请求
验证“9.6.4 发布查询请求”只改变一个 URI 组成部分,同时观察 DNS 目标、Host 与请求路径;若三者一起变化,就无法归因。
9.6.5 对结果进行排序,并提供查询结果
验证“9.6.5 对结果进行排序,并提供查询结果”只改变一个 URI 组成部分,同时观察 DNS 目标、Host 与请求路径;若三者一起变化,就无法归因。
9.6.6 欺诈
“9.6.6 欺诈”的风险包括无限空间、别名重复、站点压力与排序欺诈;停止条件和每主机预算必须成为可审计状态。
9.7 更多信息
“9.7 更多信息”是原书的延伸资料入口,不增加新的协议结论;使用时必须记录资料版本、适用的 HTTP 年代和与本章结论的对应关系。
复原原始HTTP事务
固定URL、资源、连接与版本,写出请求行、首部、主体、响应和所有中间实体。
HTTP/1.1 message laboratory
第9章 web 机器人
构建爬虫根集、链接规范化、环路与重复避免、机器人HTTP、robots.txt和搜索索引
GET /resource?chapter=%E7%AC%AC9%E7%AB%A0%20web%20%E6%9C%BA%E5%99%A8%E4%BA%BA HTTP/1.1 Host: example.test Connection: keep-alive
章内坐标:第9章 web 机器人、9.1 爬虫及爬行方式、9.1.1 从哪儿开始:根集、9.1.2 链接的提取以及相对链接的标准化、9.1.3 避免环路的出现、9.1.4 循环与复制、9.1.5 面包屑留下的痕迹、9.1.6 别名与机器人环路
可复现实验记录
GET /resource HTTP/1.1
Host: example.test
Connection: keep-alive
Accept: */*HTTP/1.1 200 OK
Date: Tue, 01 Jan 2002 00:00:00 GMT
Content-Type: text/plain
Content-Length: 5
helloevidence = request_bytes + response_bytes + tcp_timeline + intermediary_state + recovery动手试:保存一次正常请求、一次缓存或连接边界和一次单变量故障。记录客户端、代理、缓存、网关与源服务器看到的原始报文,以及统一时间戳和恢复动作。
独立证据门
最小证据包包含:首版节点、URL、原始请求/响应、连接时间线、代理与缓存决策、身份和编码、单变量故障、恢复、偏差、责任人与复核人。
练习
练习
问题 1:为什么“第9章 web 机器人”必须固定2002年首版?
问题 2:怎样构造“不做规范化和环路检测会无限抓取别名、动态空间并给站点造成过量负载”的最小反例?
问题 3:何时可以认为本页完成独立交接?
本章回顾
“第9章 web 机器人”的核心是构建爬虫根集、链接规范化、环路与重复避免、机器人HTTP、robots.txt和搜索索引。真正掌握不是记首部名,而是能用原始报文、连接和中间状态证明资源如何被定位、传输、缓存、保护与交付。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 爬虫
自动获取页面并从中发现后续链接的Web机器人。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- 根集
爬行开始时提供的初始URL集合。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- URL规范化
把等价URL转换为稳定比较形式的过程。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- robots.txt
站点发布给机器人读取的访问排除规则文件。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- 全文索引
把词项映射到文档以支持搜索查询的数据结构。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。