扩展FrontierScheduler来抓取特定的内容
来源:互联网 发布:2017年全球数据总量 编辑:程序博客网 时间:2024/06/05 17:57
FrontierScheduler是一个PostProcessor,它的作用是将在Extractor中所分析得出的链接加入到Frontier中,以待继续处理。先来看一下FrontierScheduler的innerProcess()方法,代码如下。
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方法来达到我们的需要。以下是一个示例。
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|NewsFrontierSchedulerorg.archive.crawler.postprocessor.FrontierScheduler|FrontierScheduler
参考资料:
http://www.xuebuyuan.com/1339469.html
- 扩展FrontierScheduler来抓取特定的内容
- 扩展Heritrix的FrontierScheduler(正则表达式的应用)
- 学习用requests, bs4 抓取网页特定的内容
- 抓取软件输出的特定内容并按特定格式赋值给变量
- 用正则表达式抓取制定网页的特定内容(本文以抓取a标签为例)
- 【垂直搜索引擎搭建03】heritrix:扩展FontierScheduler抓取特定的信息
- 排除特定的内容
- bash中输出特定变量名的内容,属于 参数替换和扩展 这一章节
- 网页内容抓取 图片的抓取方法
- 把 scrapy 抓来的内容 相对路径,转换成 绝对路径,用于下一次的抓取
- 爬虫奇遇记——如何按照标签的文本内容来抓取
- 抓取网页内容的函数
- [python]抓取网页的内容
- 有关网页抓取的内容
- phpquery抓取搜狗微信的内容
- php抓取https的内容
- 用python来为自己办事-抓取网页内容
- 页面抓取特定链接
- 【BJOI 2014】大融合
- (17/06/25)STM32学习->GPIO输出控制LED
- MyBatis实例
- C++学习:模板编程(泛型)
- material_designer风格介绍
- 扩展FrontierScheduler来抓取特定的内容
- offset_of宏和contianer_of宏的功能
- OpenCV学习笔记--颜色空间及转换
- Redis 与集合(Set)相关的命令
- Linux虚拟机搭建大数据集群
- 如何使用git命令提交项目到github并创建不同的版本控制
- CPU 和 GPU 的区别
- 写jquery插件
- POJ 2404 Jogging Trails 笔记