锁定老帖子 主题:Java爬虫框架(二)--模块设计之一
精华帖 (3) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-18
一、 模块1. SchedulerScheduler负责启动爬虫,停止爬虫,监控爬虫的状态。
Scheduler在调度爬虫时,借助于Quartz,设置爬虫在某个时刻启动。同一个名字的爬虫是stateful的。 Task:初始化任务。 Trigger: 触发器,描述何时触发爬虫。 开放Scheduler远程API,可以通过爬虫配置管理平台管理和监控爬虫。 2. Task Master
TaskMaster:管理Task的执行过程,提交Task给WorkerThreadPool执行。 TaskController:独立线程,控制何时停止TaskMaster,DelayController和它自己 ExecutionState:描述TaskMaster当前状态 TaskQueue:存放未爬取的所有Task。可以是基于内存的,也可以是持久化的。不同的实现。 DelayTaskQueue:有些网站,如果连续访问,会禁止爬取,遇到这种情况,我们会暂时停止对该网页的爬取,我们需要一个DelayTaskQueue存放被延迟的Task。 DelayController:独立线程,不停的检测DelayTaskQueue中的Task是否过了限制期,过了限制期,移入到TaskQueue中等待爬取 Task:描述一个爬取任务。 HTMLTask:网页爬取任务 DBTask:DB爬取任务 DelayPolicy:定义Task的延迟策略,比如对同一个域名的网站,采取每隔5秒钟的爬取一次的方案。如果发现遭到限制,对同一个域名的网站,采取停歇10分钟的策略。 考虑到对将来对数据爬虫的支持,抽象了统一接口。数据库对Task,Fetcher,parser,Handler,Worker都有自己的实现。 3. Fetcher网页的直接爬取者。根据传入的Task,爬取对方的网页。
WebFetcher爬取的网页直接作为输入流传回。 HTTPClientFetcher:用HTTPClient4.0实现的WebFetcher,底层用的是java NIO. 4. WorkerWorker负责Task的具体执行,从爬取到处理的整个流程. TaskMaster将Worker提交到线程池中,有线程池调度并发执行。
Worker:整个爬取的执行流程 HTMLWorker:处理HTML网页的爬取 WorkerThreadPool:线程池,供Worker执行使用 WorkerProcessor:监听器。在worker执行前,执行后调用。可以做一些日志,错误处理等等。 5. ParserParser将爬虫爬取的内容解析为规范的数据格式,提取有用的信息,便于系统进一步处理。
Parser:将传入的content解析成Data,或者利用传入的handler可以一边parse一边调用handler处理。 Data:Parser解析后的数据结构 Content:Fetcher到的Content RegexParser:对传入的字符串进行正则匹配,提取想要的字符串。 SaxParser:主要是通过回调方式实现 DomParser:将XML转成Document返回 HTMLParser:组合模式,可以综合使用RegexParser,DomParser等完成任务。 ParseContext:传给Parser的上下文环境。可供扩展使用。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-08-19
ldd600 写道
一、 模块1. SchedulerScheduler负责启动爬虫,停止爬虫,监控爬虫的状态。
Scheduler在调度爬虫时,借助于Quartz,设置爬虫在某个时刻启动。同一个名字的爬虫是stateful的。 Task:初始化任务。 Trigger: 触发器,描述何时触发爬虫。 开放Scheduler远程API,可以通过爬虫配置管理平台管理和监控爬虫。 2. Task Master
TaskMaster:管理Task的执行过程,提交Task给WorkerThreadPool执行。 TaskController:独立线程,控制何时停止TaskMaster,DelayController和它自己 ExecutionState:描述TaskMaster当前状态 TaskQueue:存放未爬取的所有Task。可以是基于内存的,也可以是持久化的。不同的实现。 DelayTaskQueue:有些网站,如果连续访问,会禁止爬取,遇到这种情况,我们会暂时停止对该网页的爬取,我们需要一个DelayTaskQueue存放被延迟的Task。 DelayController:独立线程,不停的检测DelayTaskQueue中的Task是否过了限制期,过了限制期,移入到TaskQueue中等待爬取 Task:描述一个爬取任务。 HTMLTask:网页爬取任务 DBTask:DB爬取任务 DelayPolicy:定义Task的延迟策略,比如对同一个域名的网站,采取每隔5秒钟的爬取一次的方案。如果发现遭到限制,对同一个域名的网站,采取停歇10分钟的策略。 考虑到对将来对数据爬虫的支持,抽象了统一接口。数据库对Task,Fetcher,parser,Handler,Worker都有自己的实现。 3. Fetcher网页的直接爬取者。根据传入的Task,爬取对方的网页。
WebFetcher爬取的网页直接作为输入流传回。 HTTPClientFetcher:用HTTPClient4.0实现的WebFetcher,底层用的是java NIO. 4. WorkerWorker负责Task的具体执行,从爬取到处理的整个流程. TaskMaster将Worker提交到线程池中,有线程池调度并发执行。
Worker:整个爬取的执行流程 HTMLWorker:处理HTML网页的爬取 WorkerThreadPool:线程池,供Worker执行使用 WorkerProcessor:监听器。在worker执行前,执行后调用。可以做一些日志,错误处理等等。 5. ParserParser将爬虫爬取的内容解析为规范的数据格式,提取有用的信息,便于系统进一步处理。
Parser:将传入的content解析成Data,或者利用传入的handler可以一边parse一边调用handler处理。 Data:Parser解析后的数据结构 Content:Fetcher到的Content RegexParser:对传入的字符串进行正则匹配,提取想要的字符串。 SaxParser:主要是通过回调方式实现 DomParser:将XML转成Document返回 HTMLParser:组合模式,可以综合使用RegexParser,DomParser等完成任务。 ParseContext:传给Parser的上下文环境。可供扩展使用。
|
|
返回顶楼 | |
发表时间:2011-08-19
很好写的非常详细,结构条理清晰,QQ5369919
|
|
返回顶楼 | |
浏览 5758 次