读webmagic笔记

这里来记录一下scheduler模块

介绍这个模块之前先要介绍一下scheduler.component模块

 DuplicateRemover是接口,接口函数有 public boolean isDuplicate(Request request, Task task);和public void resetDuplicateCheck(Task task);以及public int getTotalRequestsCount(Task task);

实现它的类有:HashSetDuplicateRemover 和 BloomFilterDuplicateRemover其中HashSetDuplicateRemover 中是以Sets.newSetFromMap来判断是否重复。BloomFilterDuplicateRemover 使用BloomFilter<CharSequence>来去重。scheduler.component模块实现了对抓取URL的保存。

下面我们看一下scheduler模块

首先是接口interface Scheduler 接口函数有: public void push(Request request, Task task);   public Request poll(Task task);这个接口就是获得和添加待爬取的URL,同时还有接口继承了这个接口:interface MonitorableScheduler extends Scheduler  接口中的函数有: public int getLeftRequestsCount(Task task);  public int getTotalRequestsCount(Task task);MonitorableScheduler接口是提供监控功能,也就是查看还剩下多少待爬取的URL,和总共有多少URL。下面介绍实现类:

实现类都是实现了接口同时还继承了abstract class DuplicateRemovedScheduler,DuplicateRemovedScheduler同时也是实现了接口Scheduler 。DuplicateRemovedScheduler 使用了DuplicateRemover作为他的成员,同时留下了待实现的两个函数 boolean shouldReserved(Request request),和 void pushWhenNoDuplicate(Request request, Task task) ,他实现了接口 Scheduler 中的函数push(Request request, Task task)。只有满足结果URL中不含有待抓取的URL和shouldReserved(request)这两个条件的时候,才会调用 pushWhenNoDuplicate(request, task),这样函数应该是将URL放到结果URL中去。

class QueueScheduler extends DuplicateRemovedScheduler implements MonitorableScheduler用LinkedBlockingQueue实现了存放待抓取的URL,getLeftRequestsCount就是返回队列中的URL的数量,getTotalRequestsCount则是返回用于去重的结果URL中的数量。PriorityScheduler extends DuplicateRemovedScheduler implements MonitorableScheduler  用了LinkedBlockingQueue<Request>,PriorityBlockingQueue<Request> priorityQueuePlus和 PriorityBlockingQueue<Request>priorityQueueMinus 用来暂时的存放待抓取的URL。分别存放的是没有设置优先级,也就是getPriority()结果返回值为0,>0和<0的三种URL。到这里scheduler也就介绍完成了。以后会就每个模块分别进行介绍的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值