前面提到了搜索引擎的4各组成部分,但在个人理解中,可以笼统的分为3个部分,如下图所示:
现在针对采集器,进行技术选型。
由于我熟悉的是Java语言,且做的是垂直搜索引擎(针对手机,虽然最后没实现),做一定的改造是必须的。所以,倾向于选择利用Java语言开发的,可扩展性强的爬虫。
考虑到自己的水平实在是一般,尽量选热门的会比较好。一方面官方API必定质量较高,预留接口多,掌握比较容易。另一方面,用的人多,很多问题就已经有了解决的办法,不需要自己看API钻研。另外,尽量选新版本,但不使用最新版本。一般热门的开源项目,更新速度会比较快,新特性是有的,但是改变一般不大。最新的版本,很容易有各种Bug,实在是懒得折腾。
基于以上的原则,下面进行技术选型。
首先是爬虫的选型,垂直搜索,首当其冲的,就是数据的来源问题。垂直爬虫,就是在通用爬虫的基础上,加强种子站点的构造和链接的主题匹配。
目前Java开源爬虫中,比较火热的有以下两个:
- Heritrix
由于在上年10月份,Heritrix3.X并没有太多的教程。处于保险起见,会选择Heritrix1.14。Heritrix可扩展性强,基于XML的配置,还有Web控制界面,非常好用。
Heritrix主要有三大部件:范围部件,边界部件,处理器链
范围部件:主要按照规则决定将哪个URI入队。
边界部件:跟踪哪个预定的URI将被收集,和已经被收集的URI,选择下一个 URI,剔除已经处理过的URI。
处理器链:包含若干处理器获取URI,分析结果,将它们传回给边界部件
可见,Heritrix改造成主题爬虫是比较合适的,且其处理器链的处理流程十分清晰,接口预留完整,改造难度小。
需要注意的是Heritrix被设计成严格遵循robots.txt文件的排除指示和META robots标签,很多网站是不希望被抓取的,好在有解决的办法。
Heritrix可将整个站点做镜像保存,接收各种文档格式。但对于更新支持差,采用追加的方式添加。 - Nutch
将Nutch单纯的定义为爬虫并不太合适,实际上,Nutch是带有爬虫功能的全文索引工具包。在早期1.X,Nutch甚至包含搜索界面。后来,才专门独立出了Solr。
Nutch与Lucene的集成较好,API基本兼容Lucene的。
相对于Heritrix,Nutch可卡农估值的参数较少。没有UI控制界面,只能从命令行启动。
Nutch对网页内容进行索引存储,更新时会自动替换旧的内容。
综合考虑,处于探究原理的出发点,将选择Heritrix做为此次的采集器。能做镜像存储,就可能实现快照功能(虽然垂直搜索引擎并不需要这功能)。对处理器链进行重写,在XML中配置,就能很方便的改造好爬虫,这是件多么让人愉悦的事情。