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 18 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
一百多行python代码实现抢票助手
Sep 25 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
python通过实例讲解反射机制
Oct 17 Python
tensorflow 获取所有variable或tensor的name示例
Jan 04 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
python进度条显示-tqmd模块的实现示例
Aug 23 Python
python3 os进行嵌套操作的实例讲解
Nov 19 Python
详解Python生成器和基于生成器的协程
Jun 03 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
星际争霸任务指南——神族
2020/03/04 星际争霸
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
实习生自荐信范文
2013/11/13 职场文书
市场部专员岗位职责
2013/11/30 职场文书
青年文明号服务承诺
2014/03/31 职场文书
护理学专业求职信
2014/06/29 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
施工安全协议书范本
2014/09/26 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python