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单链表实现代码实例
Nov 21 Python
django批量导入xml数据
Oct 16 Python
使用python实现个性化词云的方法
Jun 16 Python
利用Python循环(包括while&for)各种打印九九乘法表的实例
Nov 06 Python
解读! Python在人工智能中的作用
Nov 14 Python
python tensorflow基于cnn实现手写数字识别
Jan 01 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
Python实现实时数据采集新型冠状病毒数据实例
Feb 04 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
python利用opencv实现颜色检测
Feb 23 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 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
建立动态的WML站点(二)
2006/10/09 PHP
PHP+DBM的同学录程序(5)
2006/10/09 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
原生js实现随机点名功能
2019/11/05 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
python检测服务器端口代码实例
2019/08/31 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
Python3 利用face_recognition实现人脸识别的方法
2020/03/13 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
用canvas显示验证码的实现
2020/04/10 HTML / CSS
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
倡议书范文格式
2014/05/12 职场文书
英语教师自荐信
2014/05/26 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技
MySQL日期时间函数知识汇总
2022/03/17 MySQL
Python数据处理的三个实用技巧分享
2022/04/01 Python