前言
考虑到上次的网络爬虫总结一文对基础的知识还没有介绍完整,所以今天花一点时间来补充上次的网络爬虫基础知识。这次给大家总结了两个方面的内容:暗网抓取和分布式爬虫。希望对阅读本文的博友们有所收获。
暗网抓取
物理学研究表明,在目前宇宙所有物质的总体质量中,星系等可见物质占其中的20%,不可探测的暗物质占据了总质量的80%。互联网中暗网可以与宇宙的暗物质相类比,而其所占网页的比例,更是远大于暗物质占宇宙质量的比例,大约百倍于目前的明网网页。
什么是暗网
所谓暗网,是指目前搜索引擎爬虫按照常规方式很难抓取到的互联网页面。如前所述,搜索引擎爬虫依赖页面中的链接关系发现新的页面,但是很多网站的内容是以数据库方式存储的,典型的例子是一些垂直领域网站,比如携程旅行网的机票数据,很难有显式链接指向数据库内的记录。所以 ,常规的爬虫无法索引这些数据内容,这是暗网的命名由来。
为了能够对暗网数据进行索引,需要研发与常规爬虫机制不同的系统,这类爬虫被称为暗网爬虫。暗网爬虫的目的是将暗网数据从数据库中挖掘出来,并将其加入搜索引擎的索引,这样用户在搜索时便可利用这些数据,增加信息覆盖程度。
目前大型搜索引擎服务提供商都将暗网挖掘作为重要研究方向,因为这直接关系到索引量的大小。在此领域的技术差异,将直接体现在搜索结果的全面性上,自然是竞争对手之间的必争之地。Google目前将其作为重点研发方向,而百度的“阿拉丁计划”目的也在于此。
垂直网站提供的搜索界面,往往需要人工选择或者填写内容,比如机票搜索需要选择出发地、到达地和日期,图书搜索需要支出书名或者作者。而暗网爬虫为了能够挖掘数据库的记录,必须模拟人的行为,填写内容并提交表单。对于暗网爬虫来说,其技术挑战有两点:一是查询组合太多,如果一一组合遍历,那么会给被访问网站造成太大压力,所以如何精心组合查询选项是个难点;第二点就是有的查询是文本框,比如图书搜索中需要输入书名,爬虫怎么样才能够填入合适的内容呢?
查询组合问题
对于暗网爬虫来说,刚才就说到不能简单暴力的查询,那么Google对此就提出了一种方案,称之为富含信息查询模板。那么我们首先解释查询模板。比如如我之类的大学生去智联招聘、前程无忧之类的找工作的网站寻找实习职位时,由于不愿意查看和自己不匹配的职位,这时我们需要用到职位搜索这一栏,完整的查询一般由3个不同的属性组成:职位类别、行业类别和工作地点。如果在向搜索引擎提交查询的时候,部分属性被赋予了值,而其他属性不赋值,则这几个赋值的属性一起构成了一个查询模板。
那么什么又是富含信息查询模板呢?对于某个固定的查询模板来说,如果给模板内每个属性都赋值,形成不同的查询组合,提交给垂直搜索引擎,观察所有返回页面的内容,如果相互之间内容差异较大,说明这个查询模板就是富含信息查询模板。
文本框填写问题
在爬虫运转起来之前,因为对目标网站一无所知,所以必须人工提供一些提示。通过人工观察网站进行定位,提供一个与网站内容相关的初始种子查询关键词表。爬虫根据初始种子词表,向垂直搜索引擎提交查询,并下载返回的结果页面。之后从返回结果页面里自动挖掘出相关的关键词,并形成一个新的查询列表,依次将新挖掘出的查询提交给搜索引擎。如此往复,直到无法下载到新的内容为止。
分布式爬虫
对于商业搜索引擎来说,面对海量待抓取网页,分布式爬虫架构是必须采用的技术。只有采取分布式架构,才有可能在较短时间内完成一轮抓取工作。常见的分布式架构有两种:主从式分布爬虫和对等式分布爬虫。
主从式分布爬虫:不同的服务器承担不同的角色分工,其中有一台专门负责对其他服务器提供URL分发服务,其他机器则进行实际的网页下载。URL服务器维护待抓取URL队列,并从中获得待抓取网页的URL,分配给不同的抓取服务器,另外还要对抓取服务器之间的功过进行负载均衡,使得各个服务器承担的工作量大致相等,不至于出现忙的过忙、闲的过闲的情形。抓取服务器之间没有通信联系,每个抓取服务器只和URL服务器进行消息传递。
对等式分布爬虫:服务器之间不存在分工差异,每台服务器承担相同的功能,各自负担一部分URL的抓取工作。
这种架构由于没有URL服务器存在,所以每台抓取服务器自己来判断某个URL是否应该由自己抓取,或者将这个URL传递给相应的服务器。至于判断方法,可以对网址的主域名进行哈希计算,之后去模,如果计算所得的值和抓取服务器编号匹配,则自己下载该网页,否则将该网址转发给对应编号的抓取服务器。
后话
网络爬虫确实有非常多的基础知识和实战技术,目前的我掌握的技能是非常的少,接下来肯定会努力学习爬虫实战技术的,往后也会向大家分享我学习的东西。不过,在搜索引擎这一part,索引对搜索是非常重要的,面对海量的网页内容,如何快速的找到包含用户查询关键词的网页,是一直都需要解决并优化的技术。所以接下来,我会在搜索引擎一系列总结中给大家讲解倒排索引这一方法。