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 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
Python编码爬坑指南(必看)
Jun 10 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
Python和C/C++交互的几种方法总结
May 11 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
对python多线程SSH登录并发脚本详解
Feb 14 Python
pycharm创建一个python包方法图解
Apr 10 Python
python opencv实现证件照换底功能
Aug 19 Python
使用python os模块复制文件到指定文件夹的方法
Aug 22 Python
python+pygame实现坦克大战
Sep 10 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
sklearn的predict_proba使用说明
Jun 28 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 开源AJAX框架14种
2009/08/24 PHP
PHP导入Excel到MySQL的方法
2011/04/23 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
JavaScript的Cookies
2008/01/16 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
python学习教程之使用py2exe打包
2017/09/24 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
pytorch permute维度转换方法
2018/12/14 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
python的scipy实现插值的示例代码
2019/11/12 Python
python 字典访问的三种方法小结
2019/12/05 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
python 实现两个线程交替执行
2020/05/02 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
网络安全方面的面试题
2015/11/04 面试题
公司前台辞职报告
2014/01/19 职场文书
区三好学生主要事迹
2014/01/30 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
幼儿教师个人总结
2015/02/05 职场文书
人事任命通知
2015/04/20 职场文书
创业计划书之面包店
2019/09/17 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫