Mr.J-- HTTP学习笔记(九)-- Web机器人

本文介绍了Web机器人的工作原理,包括如何避免环路、规范化URL处理、HTTP请求首部的识别,以及如何通过条件请求优化性能。同时,强调了机器人规范的重要性,如识别、约束行为、容忍问题和提升可靠性,最后探讨了搜索引擎的工作机制和全文索引的概念。
摘要由CSDN通过智能技术生成

我的专栏:  HTTP学习笔记

起点

爬虫开始访问的 URL 初始集合被称作根集(root set)。

文档 A 开始, 可以到达 B、 C 和 D, 然后是 E 和 F, 然后到 J, 然后到 K。 但没有从 A 到 G, 或从 A到 N 的链路。

爬虫在 Web 上移动时, 会不停地对 HTML 页面进行解析。它要对所解析的每个页面上的 URL 链接进行分析, 并将这些链接添加到需要爬行的页面列表中去。

环路

机器人在 Web 上爬行时, 要特别小心不要陷入循环, 或环路(cycle) 之中。

 环路的不利

• 它们会使爬虫陷入可能会将其困住的循环之中。 循环会使未经良好设计的爬虫不停地兜圈子, 把所有时间都耗费在不停地获取相同的页面上。
• 爬虫不断地获取相同的页面时, 另一端的 Web 服务器也在遭受着打击。 如果爬虫与服务器连接良好, 它就会击垮 Web 站点, 阻止所有真实用户访问这个站点。
• 即使循环自身不是什么问题,爬虫也是在获取大量重复的页面。

规范化URL

由于 URL“别名” 的存在, 即使使用了正确的数据结构, 有时也很难分辨出以前是否访问过某个页面。

(1) 如果没有指定端口的话, 就向主机名中添加“:80”。
(2) 将所有转义符 %xx 都转换成等价字符。
(3) 删除 # 标签。

动态虚拟Web空间

恶意网管可能会有意创建一些复杂的爬虫循环来陷害那些无辜的、 毫无戒备的机器人。即使这个恶意 Web 服务器实际上并不包含任何文件,那些没有恶意的网管们可能会在无意中通过符号连接或动态内容构造出爬虫陷阱。
 

如何使Web机器人有更好的表现

规范化 URL将 URL 转换为标准形式以避免语法上的别名
广度优先的爬行每次爬虫都有大量潜在的 URL 要去爬行。
节流限制一段时间内机器人可以从一个 Web 站点获取的页面数量
限制 URL 的大小机器人可能会拒绝爬行超出特定长度(通常是 1KB) 的 URL。
URL/ 站点黑名单维护一个与机器人环路和陷阱相对应的已知站点及 URL 列表。 发现新问题时, 就将其加入黑名单。
模式检测

文件系统的符号连接和类似的错误配置所造成的环路会遵循某种模式

内容指纹一些更复杂的 Web 爬虫会使用指纹这种更直接的方式来检测重复。 使用内容指纹的机器人会获取页面内容中的字节, 并计算出一个校验和(checksum)。
人工监视设计所有产品级机器人时都要有诊断和日志功能,

机器人的HTTP

识别请求首部

User-Agent:将发起请求的机器人名字告知服务器。

From:提供机器人的用户 / 管理者的 E-mail 地址。

Accept:告知服务器可以发送哪些媒体类型。 这有助于确保机器人只接收它感兴趣的内容(文本、 图片等)。

Referer:提供包含了当前请求 URL 的文档的 URL。

虚拟主机

机器人实现者要支持 Host 首部。
 

条件请求

只在内容发生变化时才重新获取内容是很有意义的。有些机器人实现了条件 HTTP 请求,它们会对时间戳或实体标签进行比较, 看看它们最近获取的版本是否已经升级了。

对响应的处理

状态码

机器人应该能够处理一些常见的, 以及预期的状态码。 所有机器人都应该理解 200 OK 和 404 Not Found 这样的状态码。

实体

除了 HTTP 首部所嵌的信息之外, 机器人也会在实体中查找信息。

行为不当的机器人

失控机器人

如果机器人存在编程逻辑错误, 或者陷入了环路之中, 就可能会向 Web 服务器发出大量的负载——很可能会使服务器过载, 并拒绝为任何其他人提供服务。

失效的URL

有些机器人会去访问 URL 列表。 这些列表可能很老了。 如果一个 Web 站点对其内容进行了大量的修改, 机器人可能会对大量不存在的 URL 发起请求。

很长的错误URL

由于环路和编程错误的存在, 机器人可能会向 Web 站点请求一些很大的、 无意义的 URL。

爱打听的机器人

有些机器人可能会得到一些指向私有数据的 URL, 这样, 通过因特网搜索引擎和其他应用程序就可以很方便地访问这些数据了。 而在最坏的情况下, 则会认为这种行为是对隐私的侵犯。

动态网关访问

机器人并不总是知道它们访问的是什么内容。 机器人可能会获取一个内容来自网关应用程序的 URL。

机器人的规范

(1) 识别

识别你的机器人

用 HTTP 的 User-Agent 字段将机器人的名字告诉 Web 服务器。 这样可以帮助管理员理解机器人所做的事情。 有些机器人还会在 User-Agent首部包含一个描述机器人目的和策略的 URL。

识别你的机器

确保机器人是从一台带有 DNS 条目的机器上运行的, 这样 Web 站点才能够将机器人的 IP 地址反向 DNS 为主机名。 这有助于管理者识别出对机器人负责的组织。

识别联络人

用 HTTP 的 From 字段提供一个联络的 E-mail 地。

(2) 操作

保持警惕

如果机器人要全天候运行, 就要格外小心。 需要有操作人员不间断地对机器人进行监视, 直到它有了丰富的经验为止。

做好准备

开始机器人之旅时,一定要通知你所在的组织。你的组织可能要观测网络带宽的耗费,作好应对各种公共查询的准备。

监视并记录日志

机器人应该装备有丰富的诊断和日志记录工具, 这样才能记录进展、 识别所有的机器人陷阱, 进行完整性检查看看工作是否正常。

学习并适应

在每次爬行中你都会学到新的东西。 要让机器人逐步适应, 这样, 它在每次爬行之后都会有所进步, 并能避开一些常见的陷阱。

(3) 约束自己的行为

对 URL 进行过滤

如果一个 URL 指向的好像是你不理解或不感兴趣的数据, 你可能会希望跳过它。  要确保你得到的就是你想要的。

过滤动态 URL

通常, 机器人不会想去爬行来自动态网关的内容。 机器人不知道应该如何正确地格式化查询请求, 并将其发送给网关, 而它得到的结果也很可能是错误的或临时的。

对 Accept 首部进行过滤

机器人应该用 HTTP 的 Accept 首部来告诉服务器它能够理解哪种内容。

遵循 robots.txt

机器人应该接受站点上 robots.txt 的控制。

制约自己

机器人应该记录访问每个站点的次数以及访问的时间, 并通过这些信息来确保它没有太频繁地访问某个站点。

(4) 容忍存在环路、 重复和其他问题

处理所有返回代码

必须做好处理所有 HTTP 状态码的准备, 包括各种重定向和错误码。 还应该对这些代码进行记录和监视。

规范 URL

试着将所有 URL 都转化为标准形式来消除常见的别名

积极地避免环路的出现

努力地检测并避免环路的出现。  有些环路是故意造成的恶意环路。 这些环路可能很难检测。 有的站点会带有一些怪异的 URL, 要监视对这类站点进行的大量访问。 

维护一个黑名单

找到陷阱、 环路、 故障站点和不希望机器人访问的站点时, 要将其加入一个黑名单, 不要再次访问这些站点。

(5) 可扩展性

了解所需空间

事先通过数学计算明确你要解决的问题规模有多大。

了解所需带宽

了解你有多少网络带宽可用, 以及在要求的时间内完成机器人任务所需的带宽大小。

了解所需的时间

了解机器人完成其任务所需花费的时间, 检查这个进度是否与自己的估计相符。

分而治之

对大规模的爬行来说, 可以使用带有多个网卡的大型多处理器服务器, 也可以使用多台较小的计算机共同配合工作。

(6) 可靠性

彻底测试

在将机器人放出去之前, 要对其进行彻底的内部测试。 

检查点

所有严谨的机器人都要保存其进展的快照, 出现故障时可以从那里重新开始。 

故障恢复

预测故障的发生, 对机器人进行设计, 使其能够在发生故障时继续工作。

搜索引擎

得到最广泛使用的 Web 机器人都是因特网搜索引擎。 因特网搜索引擎可以帮助用户找到世界范围内涉及任意主题的文档。

全文索引

全文索引就是一个数据库, 给它一个单词, 它可以立即提供包含那个单词的所有文档。 创建了索引之后, 就不需要对文档自身进行扫描了。

• 单词“a” 位于文档 A 和 B 中;
• 单词“best” 位于文档 A 和 C 中;
• 单词“drill” 位于文档 A 和 B 中;
• 单词“routine” 位于文档 B 和 C 中;
• 单词“the” 位于所有的三份文档 A、 B 和 C 中。

发布查询请求

搜索查询请求的实例

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值