heritrix-1.14.4初学笔记

来源:互联网 发布:初学java用java7还是8 编辑:程序博客网 时间:2024/06/11 16:40

在运行heritrix过程中有个很重要的配置文件order.xml(这里面有很多配置的属性要慢慢的了解)这里面声明了运行过程中所需的所有属性

heritrix读取order.xml文件通过--org.archive.crawler.settings包下的XMLSettingsHandler类

一、order.xml文件的读取

1.要把order.xml文件封装到File中。

2.XMLSettingsHandler构造函数的参数就是那个File的对象。

3.在它父类的方法中有一个getOrder()方法 返回一个CrawlOrder的实例。

------------------------------------------------------------------------------------------

二、CrawlOrder的作用是干什么的?

org.archive.crawler.datamodel.CrawlOrder是抓取任务的起点,访问是通过它来得到任务的属性配置的。


这部分是书上的。。。

heritrix的中央处理器org.archive.crawler.framework.CrawlController

在这个类中的一些属性:

------------------------------------------------------------------------------------------------

具体内容还不清楚还没写的现在算是一个摘抄吧

// key subcomponents which define and implement a crawl in progress

    private transient CrawlOrder order;                   //这个是上面介绍配置类

    private transient CrawlScope scope;                   //抓取范围          具体指什么?
    private transient ProcessorChainList processorChains; //处理链            怎么处理方式?
    private transient Frontier frontier;                  //调度为抓取url     调度处理?

 

//AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。    这个不了解

    private transient AtomicInteger loopingToes; 

         
    private transient ToePool toePool;                    //线程池
    private transient ServerCache serverCache;            //缓存
    // This gets passed into the initialize method.      
    private transient SettingsHandler settingsHandler;    //配置文件

------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------

上面声明的组件关系和在CrawlController中的工作顺序是怎么样的?

CrawlController的实例化:有个不带参数的构造函数 实例化时需要完成以下任务

                         1.首先构造XMLSettingHandle 装入order.xml

                         2.调用CrawlController的构造函数 构造CrawlController实例

                         3.调用CrawlController的intialize(SettingsHandler)初始化 传参为1.的实例

                         4.调用CrawlController的requestCrawlStart()方法,启动toePool和Frontier工作

--------------------------------------------------------------------------------------------------

 CrawlController的initialize()方法执行后

                         1.从XMLSettingsHandler中取出Order

                         2.检查用户设定的UserAgent是否符合格式     翻译是用户代理不知道

                         3.设定文件保存的目录结构                  这个应该是抓取后文件保存格式

                         4.初始化日志记录工具                      

                         5.初始化Berkley DB 一些工具                一点不知道   

                         6.初始化Scope、Frontier、ProcessorChain   | 组件

                         7.线程池                                  | toepool

                         8.调用requestCrawlStart()

start中首先判断是否允许当前线程开始 不允许停止 允许 调用unpause()方法。

unpause()是将阻塞的线程信号设置为false,然后通过notifyAll()唤醒阻塞线程开始

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




0 0
原创粉丝点击