Java网络爬虫crawler4j学习笔记<9> RuleSet类
来源:互联网 发布:会议室预约系统java 编辑:程序博客网 时间:2024/06/05 18:00
源代码
package edu.uci.ics.crawler4j.robotstxt;import java.util.SortedSet;import java.util.TreeSet;// RuleSet类根据robot.txt来定义爬虫爬取url时的rulepublic class RuleSet extends TreeSet<String> { private static final long serialVersionUID = 1L; @Override public boolean add(String str) { // 返回所有小于str的String集合 SortedSet<String> sub = headSet(str); // 例如如果已经加入了http://www.baidu.com/image,则不用加入http://www.baidu.con/image/1.jpg if (!sub.isEmpty() && str.startsWith(sub.last())) { // no need to add; prefix is already present return false; } boolean retVal = super.add(str); // 返回所有大于等于str+'\0'的String的集合 sub = tailSet(str + "\0"); // 去掉冗余的规则,例如如果加入的是http://www.baidu.com/image,则需要去掉http://www.baidu.com/image/1.jpg while (!sub.isEmpty() && sub.first().startsWith(str)) { // remove redundant entries sub.remove(sub.first()); } return retVal; } // 是否包含s作为前缀的规则 public boolean containsPrefixOf(String s) { SortedSet<String> sub = headSet(s); // because redundant prefixes have been eliminated, // only a test against last item in headSet is necessary if (!sub.isEmpty() && s.startsWith(sub.last())) { // 如果包含有大的规则,则等价于当前规则已经包含 return true; // prefix substring exists } // might still exist exactly (headSet does not contain boundary) return contains(s); }}
分析
RuleSet类是一个存储URL规则的集合,用于robot.txt。在URL的插入过程中,需要判断是否有包含当前规则的父规则存在,同时需要记得删除当前规则的所有子规则。
例如:
规则1:www.baidu.com/image
规则2:www.baidu.com/image/1.jpg
规则1是规则2的父规则,规则2是规则1的子规则。
0 0
- Java网络爬虫crawler4j学习笔记<9> RuleSet类
- Java网络爬虫crawler4j学习笔记<2> Util类
- Java网络爬虫crawler4j学习笔记<3> IO类
- Java网络爬虫crawler4j学习笔记<4> Net类
- Java网络爬虫crawler4j学习笔记<5> TLDList类
- Java网络爬虫crawler4j学习笔记<6> WebURL类
- Java网络爬虫crawler4j学习笔记<7> UrlResolver类
- Java网络爬虫crawler4j学习笔记<8> URLCanonicalizer类
- Java网络爬虫crawler4j学习笔记<10> HostDirectives类
- Java网络爬虫crawler4j学习笔记<11> RobotstxtConfig类
- Java网络爬虫crawler4j学习笔记<12> RobotstxtParser类
- Java网络爬虫crawler4j学习笔记<13> AuthInfo类
- Java网络爬虫crawler4j学习笔记<14> BasicAuthInfo类
- Java网络爬虫crawler4j学习笔记<15> FormAuthInfo类
- Java网络爬虫crawler4j学习笔记<17> CrawlConfig类
- Java网络爬虫crawler4j学习笔记<18> Configurable类
- Java网络爬虫crawler4j学习笔记<21> Page 类
- Java网络爬虫crawler4j学习笔记<22> Parser 类
- Java实现二维码-使用Zxing生成二维码
- 如何在eclipse中新建.tld文件求答案
- SQLite错误码
- SQL查询语句大全
- listView 实现单选多选
- Java网络爬虫crawler4j学习笔记<9> RuleSet类
- 微软产品下载
- Java读取文件的几种常用方法
- fedora24安装google-chrome-stable教程
- 决策树ID3 C++实现
- LTE -UL_grant中RIV的编码和解码
- Windows7 怎么修改本地的DNS解决网页打不开的问题?
- ubuntu 下重启网络sudo service network restart失败
- 浅谈需求分析、项目管理的哲学和实践