Java爬虫框架(二)--模块设计之一

一、        模块

1.      Scheduler

Scheduler负责启动爬虫,停止爬虫,监控爬虫的状态。



 

Scheduler在调度爬虫时,借助于Quartz,设置爬虫在某个时刻启动。同一个名字的爬虫是stateful的。

Task:初始化任务。

Trigger: 触发器,描述何时触发爬虫。

开放Scheduler远程API,可以通过爬虫配置管理平台管理和监控爬虫。

2.      Task Master



 

TaskMaster:管理Task的执行过程,提交TaskWorkerThreadPool执行。

TaskController:独立线程,控制何时停止TaskMasterDelayController和它自己

ExecutionState:描述TaskMaster当前状态

TaskQueue:存放未爬取的所有Task。可以是基于内存的,也可以是持久化的。不同的实现。

DelayTaskQueue:有些网站,如果连续访问,会禁止爬取,遇到这种情况,我们会暂时停止对该网页的爬取,我们需要一个DelayTaskQueue存放被延迟的Task

DelayController:独立线程,不停的检测DelayTaskQueue中的Task是否过了限制期,过了限制期,移入到TaskQueue中等待爬取

Task:描述一个爬取任务。

HTMLTask:网页爬取任务

DBTaskDB爬取任务

DelayPolicy:定义Task的延迟策略,比如对同一个域名的网站,采取每隔5秒钟的爬取一次的方案。如果发现遭到限制,对同一个域名的网站,采取停歇10分钟的策略。

考虑到对将来对数据爬虫的支持,抽象了统一接口。数据库对TaskFetcherparserHandlerWorker都有自己的实现。

3.      Fetcher

网页的直接爬取者。根据传入的Task,爬取对方的网页。



 

WebFetcher爬取的网页直接作为输入流传回。

HTTPClientFetcher:用HTTPClient4.0实现的WebFetcher,底层用的是java NIO.

4.      Worker

Worker负责Task的具体执行,从爬取到处理的整个流程. TaskMasterWorker提交到线程池中,有线程池调度并发执行。



 

Worker:整个爬取的执行流程

HTMLWorker:处理HTML网页的爬取

WorkerThreadPool:线程池,供Worker执行使用

WorkerProcessor:监听器。在worker执行前,执行后调用。可以做一些日志,错误处理等等。

5.      Parser

Parser将爬虫爬取的内容解析为规范的数据格式,提取有用的信息,便于系统进一步处理。



 

Parser:将传入的content解析成Data,或者利用传入的handler可以一边parse一边调用handler处理。

DataParser解析后的数据结构

ContentFetcher到的Content

RegexParser:对传入的字符串进行正则匹配,提取想要的字符串。

SaxParser:主要是通过回调方式实现

DomParser:将XML转成Document返回

HTMLParser:组合模式,可以综合使用RegexParserDomParser等完成任务。

ParseContext:传给Parser的上下文环境。可供扩展使用。

猜你喜欢

转载自ldd600.iteye.com/blog/1151957