扩展FrontierScheduler来抓取特定的内容

FrontierScheduler是一个PostProcessor,它的作用是将在Extractor中所分析得出的链接加入到Frontier中,以待继续处理。先来看一下FrontierScheduler的innerProcess()方法,代码如下。

package org.archive.crawler.postprocessor;

import org.archive.crawler.datamodel.CandidateURI;

/**
 *
 * @ClassName: NewsFrontierScheduler
 * @Description: TODO(用一句话描述这个类的作用)
 * 将Extractor中分析的链接加入到Frontier中
 * @author rj 597306518@qq.com
 * @data 2017年6月18日 下午8:59:14
 *
 */
public class NewsFrontierScheduler extends FrontierScheduler {

    private static final long serialVersionUID = -6481877812157244713L;

    public NewsFrontierScheduler(String name) {
        super(name);
    }
    
    /**
     * 定制自己的抓取逻辑
     * 将包含关键字的uri加入到链接中去

     */
     protected void schedule(CandidateURI caUri) {
         if (caUri.toString().contains("news")) {
             getController().getFrontier().schedule(caUri);
         }
     }

}

上面的代码中,首先检查当前链接处理后的结果集中是否有一些属于高优先级的链接,如果是,则立刻转走进行处理。如果没有,则对所有的结果集进行遍历,然后调用Frontier中的schedule方法加入队列进行处理。 在这里,innerProcess()中并未立刻使用Frontier中的schedule()方法,而是增加了一层封装,先调用了一个类内部的protected类型的schedule()方法,进而在这个方法中再调用Frontier的schedule方法。这种方式对FrontierScheduler进行扩展留出了很好的接口。
例如,当有某个任务在抓取时,可能希望人为的去除符合某种条件的URL链接,使得其内容不会保存到本地。比如,要去除所有的扩展名为.zip、.exe、.rar、.pdf和.doc的链接(其实也就是不想下载这类文件)。可以通过继承FrontierScheduler,并重写内部的schedule方法来达到我们的需要。以下是一个示例。

protected   void  schedule(CandidateURI caUri) { 
  
 String url 
=  caUri.toString(); 
  
 
if  (url.endsWith( " .zip " )  
      
||  url.endsWith( " .rar "
      
||  url.endsWith( " .exe "
      
||  url.endsWith( " .pdf "
      
||  url.endsWith( " .doc "
      
||  url.endsWith( " .xls " )) { 
  
return
 } 
  
 getController().getFrontier().schedule(caUri); 
  

这样,每当Heritrix在执行任务时,遇到这样的文件,就会跳过抓取,从而达到了对URL链接进行筛选的目的。

这个到后面真正抓取的时候也是很有用的


下一步:将重写的NewsFrontierScheduler 加入到   Processor.options 中


在Processor.options中找到 下面的配置行


org.archive.crawler.postprocessor.FrontierScheduler|FrontierScheduler

在它的上面添加如下代码:

org.archive.crawler.postprocessor.NewsFrontierScheduler|NewsFrontierScheduler

最后配置信息为:
org.archive.crawler.postprocessor.NewsFrontierScheduler|NewsFrontierScheduler
org.archive.crawler.postprocessor.FrontierScheduler|FrontierScheduler




参考资料:

http://www.xuebuyuan.com/1339469.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值