搜索引擎的设计与实现(二)技术选型--爬虫
2015-06-19 16:50
435 查看
前面提到了搜索引擎的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中配置,就能很方便的改造好爬虫,这是件多么让人愉悦的事情。
现在针对采集器,进行技术选型。
由于我熟悉的是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中配置,就能很方便的改造好爬虫,这是件多么让人愉悦的事情。
相关文章推荐
- 微信搜一搜迈出新的一步,好戏来了
- AJAX 支持搜索引擎问题分析
- 搜索引擎对关键词作弊判断方法揭密
- 使用php记录用户通过搜索引擎进网站的关键词
- android将搜索引擎设置为中国雅虎无法搜索问题解决方法
- Asp.Net、asp实现的搜索引擎网址收录检查程序
- 如何让搜索引擎抓取AJAX内容解决方案
- php实现判断访问来路是否为搜索引擎机器人的方法
- 解析PHP对现有搜索引擎的调用
- C#判断访问来源是否为搜索引擎链接的方法
- PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
- apache禁止搜索引擎收录、网络爬虫采集的配置方法
- PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
- 搜索引擎的Robots规则
- 说说即刻搜索那点事儿
- 15个网站图片优化的原则
- 如何让搜索引擎抓取AJAX内容?
- 搜索引擎未来发展的8种趋势
- 2012年SEO排行因素: 搜索行为社会化成为焦点