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一般用于需要通过外部配置文件(或数据 ...
随机推荐
- web快速开发c/s软件构架
很久没用.net winform 做东西,对控件相对比较陌生,另外控件的UI也不是那么好改.公司项目需要有web客户端,同时有软件客户端形式.考虑再三采用webBrowser+html 来实现 .用h ...
- 针对局域网IM飞秋(feiq)的开发总结
先上代码了,通过java代码群发feiq消息: package com.triman.constant; import java.io.IOException; import java.io.Unsu ...
- 编程实现LINUX下目录的层层遍历
/************************************************************************* > File Name: treedir.c ...
- Codeforces Round #336 (Div. 2) A. Saitama Destroys Hotel 模拟
A. Saitama Destroys Hotel Saitama accidentally destroyed a hotel again. To repay the hotel company ...
- WebSocket API简介
WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,Safari,Firefox,Opera,IE等等,对该协议支持最早的应该是chrome,从chr ...
- linux下如何查看和修改系统BLOCK的大小
http://blog.163.com/drachen@126/blog/static/162607494201271435333906/ 查看os系统块的大小 [root]# /sbin/tune2 ...
- android-exploitme(五):不安全的数据存储
今天我来看看如果android将数据存储在sdcard,它的权限是什么样的 1. 打开emm软件,做一笔转账.
- mysql 常用命令(备忘)
1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> CREATE DATABASE ...
- Hibernate笔记——关联关系配置(一对多、一对一和多对多)
原文:http://www.cnblogs.com/otomedaybreak/archive/2012/01/20/2327695.html ============================ ...
- Socket网络通讯开发总结之:Java 与 C进行Socket通讯 + [备忘] Java和C之间的通讯
Socket网络通讯开发总结之:Java 与 C进行Socket通讯 http://blog.sina.com.cn/s/blog_55934df80100i55l.html (2010-04-08 ...