文章来源http://www.cnblogs.com/MichaelYin/archive/2011/08/25/2153633.html
一转眼暑假就快要结束了,暑假也是在趁着找工作之前花时间折研究了一下Heritrix,这段时间会花点时间把这块学习和心得来做一个总结,一方面对知识的夯实,另一方面也能对园子里面的朋友有所帮助。
Heritrix的一些介绍网上都有,我在这里也就不做介绍了,直接进入正题。
Heritrix抓取任务的核心类就是CrawlController,这个对象将决定一个抓取任务的开始和结束
01 | private transient CrawlOrder order; |
03 | private transient CrawlScope scope; |
05 | private transient ProcessorChainList processorChains; |
07 | private transient Frontier frontier; |
10 | private transient ToePool toePool; |
12 | //缓存,保存了当前抓取任务抓取过的Host名称和Server名称 |
13 | private transient ServerCache serverCache; |
15 | // This gets passed into the initialize method. |
17 | private transient SettingsHandler settingsHandler; |
![crawler_overview1 crawler_overview1](https://i-blog.csdnimg.cn/blog_migrate/c14ed0d2d4911d8621cc38ddffec27bb.png)
上面这个图就是CrawlController和抓取过程中的几个关键的组件的关系图,CrawlController包含了这几个组件并对整个抓取进行管理
CrawlController的初始化是在initialize方法中完成的,根据传入的SettingsHandler得到抓取必须的参数,进行初始化,然后完成其他的一些必须的初始化工作。
二次开发的时候我们也可以自己完成这些过程,但是有几个必须的过程是必须要走的,首先就是需要构造一个XMLSettingsHandler对象,将order.xml信息装入,然后构造一个CrawlController对象,然后将XMLSettingsHandler放入到CrawlController的initialize方法中去,当完成上述工作之后,CrawlController就可以准备开始进行抓取了。
其实上述所说的过程就是Heritrix类中doOneCrawl方法的实现的过程,我们可以直接将order.xml的文件路径放入方法然后进行抓取
0 | XMLSettingsHandler handler = new XMLSettingsHandler( new File( |
3 | CrawlController controller = new CrawlController(); |
4 | controller.initialize(handler); |
6 | controller.addCrawlStatusListener(listener); |
8 | controller.requestCrawlStart(); |