Java爬虫技术框架之Heritrix框架详解


Posted in Python onJuly 22, 2020

Heritrix是一个由Java开发的开源Web爬虫系统,用来获取完整的、精确的站点内容的深度复制,

具有强大的可扩展性,运行开发者任意选择或扩展各个组件,实现特定的抓取逻辑。

一、Heritrix介绍

Heritrix采用了模块化的设计,用户可以在运行时选择要用的模块。它由核心类(core classes)和插件模块(pluggable modules)构成。

核心类可以配置,但不能被覆盖,插件模块可以由第三方模块取代。所以我们就可以用实现了特定抓取逻辑的第三方模块来取代默认的插件模块,从而满足自己的抓取需要。

CrawlController(下载控制器)整个下载过程的总控制者,整个抓取工作的起点,决定整个抓取任务的开始和结束。每个URI都有一个独立的线程,它从边界控制器(Frontier)获取新的URI,然后传递给Processor chains(处理链)经过一系列Processor(处理器)处理。

Java爬虫技术框架之Heritrix框架详解

二、Heritrix架构

中央控制器 CrawlController 是核心组件,决定了整个抓取任务的开始与结束。

用户在 Heritrix web UI 控制台设置抓取任务后,heritrix首先构造XMLSettingsHandler对象,然后调用CrawlController的构造函数,构造一个CrawlController实例并初始化,这样,CrawlController就具备了运行条件。

此时,只需调用 requestCrawlStart()方法就可以启动线程池和Frontier,以便向线程池中工作线程提供抓取用的URL链接。

Java爬虫技术框架之Heritrix框架详解

Heritrix 3.x 的框架主要分为 Engine 和 Component

三、一些API

org.archive.crawler.framework.CrawlJob;

org.archive.crawler.postprocessor.CandidatesProcessor;
org.archive.modules.CrawlURI;

等等

抓取任务CrawlOrder类:是整个抓取工作的起点。一次抓取任务包括许多属性,建立一个任务的方式有很多种,最简单的一种就是根据默认的order.xml来配置。

中央控制器CrawlController:该类决定着抓取任务的开始和结束。它包含以下几个组件:

CrawlOrder:该类保存了order.xml的属性配置;

CrawlScope:决定当前抓取范围;

ProcessorChainList:处理器链;

Frontier:一次抓取任务需要设定一个Frontier,以此来不断为其每个线程提供URI;

ToePool:它是一个线程池,管理了所有在当前任务中抓取过的Host名称和Server名称。

中央控制器CrawlControllr的类结构如图所示:

Java爬虫技术框架之Heritrix框架详解

Frontier链接制造工厂:它表示一种为线程提供链接的工具,通过一些特定的算法来决定哪个链接将接下来被送入处理器链中,同时,它本身也负责一定的日志和状态报告功能。

BdbFrontier类:它是用Berkeley DB 实现的,Berkeley DB 就是一个HashTable,它能够按“key/value”方式保存数据,能够为应用程序提供可伸缩的、高性能的、有事务保护功能的嵌入式数据库。

Heritrix的多线程ToeThread和ToePool:要想更快更有效地抓取网页,必须采用多线程,Heritrix则采用多线程机制,提供了一个标准的线程池ToePool,用于管理所有的抓取线程。

处理器链 Processor:包括PreProcessor、Fetcher、Extractor、Writer、PostProcessor五种。

四、应用

作为爬虫模块,爬取数据

Java爬虫技术框架之Heritrix框架详解

到此这篇关于爬虫技术框架之Heritrix框架详解的文章就介绍到这了,更多相关爬虫技术框架 Heritrix内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解Python3操作Mongodb简明易懂教程
May 25 Python
Python装饰器用法实例总结
Feb 07 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
Python命名空间的本质和加载顺序
Dec 17 Python
pandas基于时间序列的固定时间间隔求均值的方法
Jul 04 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
python3 实现函数写文件路径的正确方法
Nov 27 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
Python Selenium模块安装使用教程详解
Jul 09 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
Django用户认证系统如何实现自定义
Nov 12 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 Python
Python 绘制可视化折线图
Jul 22 #Python
python写文件时覆盖原来的实例方法
Jul 22 #Python
python中return不返回值的问题解析
Jul 22 #Python
Java byte数组操纵方式代码实例解析
Jul 22 #Python
Python生成器传参数及返回值原理解析
Jul 22 #Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 #Python
Selenium python时间控件输入问题解决方案
Jul 22 #Python
You might like
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
php基于curl主动推送最新内容给百度收录的方法
2016/10/14 PHP
php session的应用详细介绍
2017/03/22 PHP
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
python回调函数用法实例分析
2015/05/09 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
网络安全方面的面试题
2015/11/04 面试题
internal修饰符起什么作用
2013/12/16 面试题
shell变量的作用空间是什么
2013/08/17 面试题
数控专业个人求职信范文
2014/02/05 职场文书
初中学校军训方案
2014/05/09 职场文书
服装设计专业自荐信
2014/06/17 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
基层党支部承诺书
2015/04/30 职场文书
唐山大地震观后感
2015/06/05 职场文书
初一语文教学反思
2016/03/03 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang
asyncio异步编程之Task对象详解
2022/03/13 Python