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 相关文章推荐
python基础教程之面向对象的一些概念
Aug 29 Python
python实现的文件夹清理程序分享
Nov 22 Python
python通过装饰器检查函数参数数据类型的方法
Mar 13 Python
代码分析Python地图坐标转换
Feb 08 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
django项目登录中使用图片验证码的实现方法
Aug 15 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
python中PyQuery库用法分享
Jan 15 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
PHP 文件上传全攻略
2010/04/28 PHP
php递归使用示例(php递归函数)
2014/02/14 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
javascript每日必学之封装
2016/02/23 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
对Python3中的input函数详解
2018/04/22 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
3种python调用其他脚本的方法
2020/01/06 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
一年级学生期末评语
2014/04/21 职场文书
留学经费担保书
2014/05/12 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
基层工作经验证明样本
2014/11/16 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
解析redis hash应用场景和常用命令
2021/08/04 Redis