出自:https://www.cnblogs.com/Khan-Sadas/p/6370128.html
9.1 爬虫及爬行方式
(1) 爬虫:Web爬虫是一种机器人,他们会递归性的对各种信息Web站点进行遍历。
(2) 爬行方式:Web机器人会获取Web页面,然后获取这个页面指向的所有Web页面,再指向这个站点所指向的页面,依次类推。
(3) 从哪儿开始:根集
爬虫在开始访问的URL初始集合被称为根集。通常一个好的根集会包括一些大的流行Web站点、一个新创建的列表和一个不经常被链接的的无页面列表.
(4) 链接的提取:爬虫在在Web上移动时,会不断对HTML进行解析,它会对每个链接进行解析,并将这些链接添加到需要爬行的页面列表上去,最终爬虫会将这些相对URL转换为绝对URL。
(5) 避免环路:爬虫会根据链接在Web页面间不停跳转,在跳转期间要防止其 访问A页面-》访问B页面-》访问C-页面-》访问A页面 的循环状态(文件系统同样会存在该情况)。
后果:1.消耗网络带宽,导致无法获取其他页面。
2.爬虫环路不断访问页面的过程中,另一端的服务器也在遭受打击,可能会造成击垮站点,阻止所有正常用户访问站点。
(6) 爬虫对对访问地址的管理技术
1.树和散列表:通过搜索树或散列表来记录已访问的URL,这样加速了访问速度。
2.有损的存在位图:将URL转换为一定长度的数组,这个数组中有个相关的“存在位”,在爬过URL时会将该“存在位”置位,爬虫在再次访问该URL时会发现已访问。
3.检查点:将已访问的URL列表保存到硬盘上,以防止机器人崩溃。
4.分类:为每个机器人分配一个特定的URL“片”,由其负责爬行。
(7) 别名与机器人回路:由于URL的默认端口是否隐藏即会造成回路存在。
(8) 避免循环和重复
1.规范URL
2.广度优先的爬行
3.节流(限制机器人从一个网站获取的页面数量)
4.限制URL大小(环路会使URL长度增加,限制URL长度可有效防止无限循环)
5.URL/站点黑名单
6.模式检测(通过重复组件的环路模式进行检测,可拒绝继续环路访问)
7.内容指纹(通过对URL站点内容相同的校验,得出是否访问过,并是否继续访问)
8.人工监视
9.2 机器人的HTTP
机器人同样遵循手HTTP规范的规则,
1.识别请求首部
建议机器人实现者发送基本首部信息:
- User-Agent:机器人名称
- From:机器人的用户/管理者的邮箱
- Accept:告知服务器可以发送哪些媒体类型
- Referer:提供包含当前请求URL的文档URL
2. 虚拟主机
在默认情况下,大多数服务器都会默认的配置一个特定的站点,因此,不包含host的爬虫访问提供两个站点的服务器发出请求时,会造成返回值失误。
3.条件请求
机器人只有在内容发生变化时才重新获取内容是有意义的,因此,有些机器人实现了条件HTTP请求,他们会对时间戳或者实体签进行比较,之后确认是否继续获取。
4.对响应的处理
1.状态码
2.实体
5.User-Agent导向
很多站点会为不同的用户代理进行内容优化,并尝试对浏览器类型进行检测,以确保支持各种特性,当机器人进行访问时,站点会为机器人提供出错页面而不是请求页面。
站点管理者应该设计一个处理机器人请求的策略。
9.3 行为不当的机器人
- 失效机器人(造成服务器过载,拒绝为其他人服务)
- 失效的URL(如果一个网页经过大量修改,而机器人依然访问之前记录的该网页内容,机器人会对大量不存在的URL发起请求)
- 很长的错误URL(URL过长会降低Web服务器性能)
- 爱打听的机器人(请求私有文档,敏感数据)
- 动态网关访问
9.4 拒绝机器人访问
服务器文档中提供一份Robots.txt,其中标明机器人可以访问服务器的哪些部分,机器人请求时从Web站点首先请求该文档,然后继续访问数据。
Robots.txt具有特有格式及参数,学习不认真,略了。