物理学研究表明,在目前宇宙所有物质的总体质量中,星系等可见物质只占其中的20%,不可探测的暗物质则占据了总质量的大约80%。互联网中的暗网可与宇宙中的暗物质相类比,而其所占的比例更是大于暗物质占宇宙总质量的比例,是目前明网网页的百倍。
所谓暗网,是指目前搜索引擎爬虫按照常规方式很难抓取到的互联网页面。搜索引擎爬虫依赖页面内中的链接关系发现新的页面,但是很多网站的内容是以数据库的方式存储的,典型的例子是一些垂直领域网站,比如京东的3C家电数码数据,很难有显性链接指向数据库内的记录,往往是服务网站提供组合查询界面,只有用户按照要求选择查询条件后,才可能获得相关数据。所以常规的爬虫无法索引这些数据内容,这是暗网的命名由来。
为了能对暗网数据进行索引,需要研发与常规爬虫机制不同的系统,这类爬虫被称作暗网爬虫。暗网爬虫的目的是将暗网数据从数据库中挖掘出来,并将其加入搜索引擎的索引,这样用户在搜索时便可利用这些数据,增加信息覆盖程度。
目前大型搜索引擎服务提供商都将暗网挖掘作为重要研究方向,因为这直接关系到索引量的大小。在此领域的技术差异,将直接体现在搜索结果的全面性上,自然是竞争对手之间的必争之地。Google目前将其作为重点研究方向,而百度的“阿拉丁计划”目的也在于此。
垂直网站提供的搜索界面,往往需要人工选择或者填写内容,比如电商的商品查找需要按照分类及价格、属性、品牌、型号等筛选条件进行查找目标商品。而暗网爬虫为了能够挖掘数据库的记录,必须模拟人的行为,填写内容或选择筛选条件。对于暗网爬虫来说,其技术挑战有两点:一是查询组合太多,如果一一遍历组合,那么会给被访问网站造成太大压力,所以如何精心组合查询选项是个难点;第二点在于:有的查询是文本框,比如图书搜索中需要输入书名,爬虫怎样才能够填入合适的内容?这也是非常具有挑战性的任务。
查询组合问题
暗网爬虫能够将某个垂直网站数据库的记录尽可能多的下载到索引库中,但这是有约束和前提条件的,即不能给被访问网站造成过大的访问压力,同时尽可能节省爬虫本身的资源。
垂直搜索网站往往会给用户提供多个查询输入框,不同输入框代表了搜索对象某方面的属性,通过组合这些属性来将搜索范围缩小。对于暗网爬虫来说,一个简单粗暴的方式就是:将各个输入框可能输入的值组合起来形成查询,比如对于火车票查询来说,将所有出发城市、目的城市和时间范围的选项一一组合,形成大量的查询,提交给垂直搜索引擎,从其搜索结果里提炼数据库记录。这么做比较野蛮,而且也不是很方便,因为很多组合是无效的,大量的返回结果为空,同时对被访问网站造成了巨大的流量压力。
Google对此提出了解决方案,称之为富含信息查询模板技术,为了了解技术原理,首先需要明白什么是查询模板,我们以下图的职位搜索垂直网站来说明。
为了描述一个职位,完成的查询由3个不同的属性构成:地点、行业类别和工作地点。如果在向搜索引擎提交查询的时候,部分属性被赋予了值,而其他属性不赋值,则这几个赋值的属性一起构成了一个查询模板。
上图是由若干个“查询模板”的示例,如果模板包含一个属性,则称之为一维模板,下图中模板一一维模板,模板2和模板3是两份二维模板,模板4是三维模板。
对于一个固定的垂直搜索来说,其查询模板组合起来有很多,我们的任务是找到富含信息的查询模板,那么什么又是富含信息查询模板呢?Google的技术方案是这样定义的:对于某个固定的查询模板来说,如果给查询模板内每个属性都赋值,形成不同的查询组合,提交给垂直搜索引擎,观察所有返回页面的内容,如果相互之间的内容差异较大,则这个模板就是富含信息查询模板。
以上图的模板为例说明,其包含了两个属性:职能类别和行业类别。职位类别有3种不同赋值,行业类别有两种不同赋值,两者组合有6种不同的组合方式,形成这个模板的6个查询。将这6个查询分别提交给职位搜索引擎,观察返回页面内容变化情况,如果大部分内容返回相同或相似,则说明这个查询模板不是富含信息查询模板,否则可被认为是富含信息查询模板。
之所以如此规定,是基于如下考虑:如果返回结果页面内容重复太多,很可能这个查询模板的维度太高,导致很多组合无搜索结果,或构造的查询本身是错误的,搜索系统返回了错误页面。
假设按照上面方式对所有查询模板一一试探,判断是否为富含信息查询模板,则因为查询模板数量太多,系统效率还是会很低。为了进一步减少提交的查询数目,Google的技术方案使用了ISIT算法。
ISIT方法的基本思路是:首先从一维模板开始,对一维查询模板逐个考察,看其是否为富含信息查询模板,如果是的话,则将这个一维模板扩展到二维,再次依次考察对应的二维模板,如此类推,逐步增加维数,直到再也无法找到富含信息查询模板为止。通过这种方式,就可以找到绝大多数富含信息查询模板,同时也尽可能减少了提交的查询总数,有效达到了目的。Google的评测结果表明,这种方法和完全组合比,能够大幅度提升系统效率。
文本框填写问题
对于输入中的文本框,需要爬虫自动生成查询,以下是一个常用做法的流程图。
在爬虫运转起来之前,因为对目标网站一无所知,所以必须人工提供一些提示。在此例中,通过人工观察网站进行定位,提供一个与网站内容相关的初始种子查询关键词表。对于不同的网站,需要人工提供不同的词表,以此作为爬虫能够继续工作的基础条件。爬虫根据初始种子词表,向垂直搜索引擎提交查询,并下载返回结果页面。之后从返回结果页面里自动挖掘出相关的关键词,并形成一个新的查询列表,依次将新挖掘出的查询提交给搜索引擎。如此往复,直到无法下载到新的内容为止。通过这种人工启发结合递归迭代的方式,尽可能覆盖数据库里的记录。
如果您对爬虫有兴趣,还可以阅读: