Heritrix源码分析(七) Heritrix总体介绍(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/642794
本博客已迁移到本人独立博客: http://www.yun5u.com/
欢迎加入Heritrix群(QQ):109148319,10447185 , Lucene/Solr群(QQ) : 118972724
网上关于Heritrix的基本介绍有很多,这里就不再重复。我这里主要介绍下它的优缺点。然后我会介绍它的运作流程以及我会从流程中各个点结合源码来分别介绍....
Heritrix整体让人感觉有些复杂和繁琐,一个爬虫写成这样也真是成仙了。接触Heritrix有1年半了,大概花了2个月的时间(每天看代码时间8小时以上)将它的代码看完。这1年半也接触过Lucene和Hadoop,也兴致勃勃的调试过他们的代码,但大多是半途而废。可能因为自己工作的原因吧,要一直不停的抓取数据改进爬虫,但更主要的还是发现他们的代码其实都差不多,只是思想、设计和作用不一样而已。于是决定还是把时间花在Heritrix上,争取把他搞透,然后举一反三成为自己的东西,以后再去研究Lucene、Haddop自然也就不在话下。
首先说下Heritrix的优缺点吧,以后我会不断扩展,也欢迎大家发表意见:
1.高度可扩展性,但因为这个也加重了它的复杂和繁琐。Heritrix抓取个URL分为8个处理器分工合作完成,每个处理器都可在order.xml中配置,所以使用者可以自己扩展并使用他们,只要继承相关的父类即可。
2.性能优秀:
1)Heritrix对抓取过的Host都会相应的保存,并放在内存中,如果再次从这个Host中抓取数据就可以避免很多重复性的东西
2)可以发现运行Heritrix占用的资源很少,跑一个月也是如此。只因Heritrix在运算和IO操作上都控制得很好。而且这些操作都可以配置,比如下载URL将它写到本机每个线程最多占用多少内存。也有可能很多人会质疑,说自己扩展了Heritrix经常内存溢出,我只能说内存溢出那部分错误只会发生在你扩展的那部分代码上
3.对抓取的高度控制性:
1)严格遵守爬虫协议,用户可以针对不同的Host配置不同的爬虫策略
2)可以高度控制抓取速度、抓取规模、抓取时间等,甚至对不同的Host都可以不同的控制。
3)可以控制爬虫无节制的抓取某一个Host。很多服务器肯定无法承受爬虫无节制的抓取,所以我们得需要在爬虫上做一些控制,而Heritrix在这一方面做好。不仅可以通过控制抓取速度来控制,还可以控制对某一个Host的抓取速度
4.功能齐全:
1)有数据库这样的checkpoint,可以定时备份数据
2)很好的日志结构,可以使得它在某一次抓取之上继续抓取,而避免了重复抓取的重复劳动
2)很好的Web界面管理功能,并可以动态的获知抓取情况,如抓取速度,下载字节数
5.缺点:
1)Heritrix适合互联网抓取,也就是抓取多个网站并整站复制。而对于垂直抓取,自身没有这样的机制,因为垂直抓取需要定时定点抓取数据,而Heritrix一旦抓取完毕就停止。而且自身的代码也不适合垂直抓取,重复劳动太多。比如对URL的过滤,基本上8个处理器每个都需要过滤。而垂直抓取都是针对性的抽取URL,自然抽取到的URL是用户想要的URL,无需过滤...
2)Heritrix对中文支持不够,比如URL中有中文的URL肯定抽取不到,但这个改动部分代码页就是它的正则表达式即可
3)Heritrix使用多线程进行抓取,但抓取一段时间后会发现线程越来越少。因为Heritrix用调度中心管理要抓取的URL,将他们放入BDB数据库中。比如当BDB数据库中有10个URL而抓取的线程有25个的时候,那10个URL只能分配给10个线程抓取,另外15个线程会由于没有URL可抓取可死掉。不过这一方面改动代码也可以实现...
4)很多人抓取一段时间后会发现Heritrix会莫名其妙的停掉,或者运行30个DNS就停止,而重新运行之后又好好的。首先Heritrix的停止是在没有活动状态的线程之后停止,而线程的死掉会因为上面一点。所以当发生网络问题时而导致网页内容无法获取时就会发生这种问题,因为无法获取网页内容就意味着抽取不到新的URL。Heritrix封装了HttpClient去获取网页内容,这一块有很多隐患,目前我也在研究解决中。
5)综合以上两点就意味着Heritrix没有很好的容错性以及回复机制,只能自己改动代码来改善这一点,比如Heritrix停止后可以延续上一次的抓取继续抓取,当线程不够可以自动补充....
以上是我对Heritrix的看法,其中有很多很多值得我们学习的地方。比如读取order.xml可以说是相当灵活....我想随着自己对Heritrix的深入我对它的看法也会慢慢改变....这里欢迎大家发表看法和意见...
Heritrix源码分析(七) Heritrix总体介绍(转)的更多相关文章
- Heritrix源码分析(九) Heritrix的二次抓取以及如何让Heritrix抓取你不想抓取的URL
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/644396 本博客已迁移到本人独立博客: http://www.yun5u ...
- Heritrix源码分析(十三) Heritrix的控制中心(大脑)CrawlController(二)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/650744 本博客已迁移到本人独立博客: http://www.yun5u. ...
- Heritrix源码分析(六) Heritrix的文件结构分析(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/642618 本博客已迁移到本人独立博客: http://www.yun5u. ...
- Heritrix源码分析(十一) Heritrix中的URL--CandidateURI和CrawlURI以及如何增加自己的属性(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/649889 本博客已迁移到本人独立博客: http://www.yun5u.com/ ...
- Heritrix源码分析(十) Heritrix中的Http Status Code(Http状态码)(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/649737 本博客已迁移到本人独立博客: http://www.yun5u ...
- Heritrix源码分析(十四) 如何让Heritrix不间断的抓取(转)
欢迎加入Heritrix群(QQ):109148319,10447185 , Lucene/Solr群(QQ) : 118972724 本博客已迁移到本人独立博客: http://www.yun5u ...
- Heritrix源码分析(十四)
近段时间在搞定Lucene的一些问题,所以Heritrix源码分析暂时告一段落.今天下午在群里有同学提到了Heritrix异常终止的问题以及让Heritrix不停的抓取(就是抓完一遍后载入种子继续抓取 ...
- Vue.js 源码分析(七) 基础篇 侦听器 watch属性详解
先来看看官网的介绍: 官网介绍的很好理解了,也就是监听一个数据的变化,当该数据变化时执行我们的watch方法,watch选项是一个对象,键为需要观察的数据名,值为一个表达式(函数),还可以是一个对象, ...
- ABP源码分析七:Setting 以及 Mail
本文主要说明Setting的实现以及Mail这个功能模块如何使用Setting. 首先区分一下ABP中的Setting和Configuration. Setting一般用于需要通过外部配置文件(或数据 ...
随机推荐
- UVA 11076 Add Again 计算对答案的贡献+组合数学
A pair of numbers has a unique LCM but a single number can be the LCM of more than one possiblepairs ...
- JS中的内部类
js内部类 javascript中本身有提供一些可以直接使用的类,这种类就是内部类.主要有:Object.Array.Math.Boolean.String.Number.Date.RegExp. ...
- linux系统下挂载windows共享目录
在工作中有时我们需要在linux上挂载windows共享目录.首先我们需要学会在linux上查看windows共享了那些目录.查看操作需要安装samba-client. [root@ ~]# yum ...
- appserv安装
Appserv 官网: http://www.appservnetwork.com/ 安装好后,输入http://localhost:8082/验证是否装成功,成功后如下图
- React组件生命周期-正确执行运行阶段的函数
一. 二. <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=" ...
- Wordnet 与 Hownet 比较
近年来,随着计算机本身以及信息高速公路的飞速发展,人们开始更加重视语义的研究.各国都致力于可用于自然语言处理的大规模语义词典或大规模知识库的建设.例如:普林斯顿大学的英语Wordnet,微软的Mind ...
- Windows下搭建Android开发环境
1.下载eclipse google eclipse,到官网去下载最新版的,推荐java ee版本的,当然你要用android版本或者standard也无妨 2.下载android sdk,安装相关的 ...
- 基于webpivottable做的透视表
1.绑定数据和配置: var wptConfig=<%= wptConfig%>; webPivotTable.setCsvData(<%=dataFields %>, < ...
- Android 如何处理崩溃的异常
Android中处理崩溃异常 大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试 ...
- Activity 跳转动画 全局定义
定义application 的 theme <application android:allowBackup="true" android:icon="@drawa ...