zoukankan      html  css  js  c++  java
  • 深入学习Heritrix解析CrawlController

    当我们以Web UI方式使用Heritrix时,点击任务开始(start)按钮时,Heritrix就开始了它的爬取工作.但它的内部

    执行流程是怎样的呢?别急,下面将慢慢道来.

    (一)CrawlJobHandler

    当点击任务开始(start)按钮时,将执行它的startCrawler()方法:

    if(sAction.equalsIgnoreCase("start"))
    {
                // Tell handler to start crawl job
                handler.startCrawler();

    }

    再来看看startCrawler()方法的执行:

    Code

    由以上代码不难发现整个流程如下:

    可以看出,最终将启动CrawlController的requestCrawlStart()方法.

    (二)CrawlController

    该类是一次抓取任务中的核心组件。它将决定整个抓取任务的开始和结束.

    先看看它的源代码:

    Code


    CrawlOrder:它保存了对该次抓取任务中order.xml的属性配置。
    CrawlScope:决定当前抓取范围的一个组件。
    ProcessorChainList:从名称上可知,其表示处理器链。
    Frontier:它是一个URL的处理器,决定下一个要被处理的URL是什么。
    ToePool:它表示一个线程池,管理了所有该抓取任务所创建的子线程。
    ServerCache:它表示一个缓冲池,保存了所有在当前任务中,抓取过的Host名称和Server名称。

    在构造 CrawlController实例,需要先做以下工作:

    (1)首先构造一个XMLSettingsHandler对象,将order.xml内的属性信息装入,并调用它的initialize方法进行初始化。

    (2)调用CrawlController构造函数,构造一个CrawlController实例

    (3)调用CrawlController的initilize(SettingsHandler)方法,初始化CrawlController实例。其中,传入的参数就是

    在第一步里构造的XMLSettingsHandler实例。

    (4 )当上述3步完成后,CrawlController就具备了运行的条件。此时,只需调用它的requestCrawlStart()方法,就

    可以启动线程池和Frontier,然后开始不断的抓取网页。

    先来看看initilize(SettingsHandler)方法:

    Code

    可以看出在initilize()方法中主要做一些初始化工作,但这些对于Heritrix的运行是必需的.

    再来看看CrawlController的核心,requestCrawlStart()方法:

    Code

    可以看出,做了那么多工作,最终将启动Frontier的start方法,而Frontier将为线程池的线程提供URI,真正开始

    抓取任务.至此,抓取任务开始.

    主要参考:开发自己的搜索引擎—Lucene 2.0+Heritrix

  • 相关阅读:
    asp.net gridview中增加单击单元格事件
    asp.net在应用母版的页面下采用了ModalPopupExtender弹出窗中应用autocomplete
    网站发布后无法访问,提示“/”应用程序中的服务器错误
    asp.net将数据导出到excel
    看完让你彻底搞懂Websocket原理
    PL/SQL简单使用——导入、导出数据表
    Java 定时任务的几种实现方式
    用element-ui 时,报value.getTime is not a function错误:
    Object.assign()解释整理
    IntelliJ IDEA2017 激活方法 最新的(亲测可用)
  • 原文地址:https://www.cnblogs.com/hustcat/p/1308866.html
Copyright © 2011-2022 走看看