Crawler4j学习笔记
Crawler4j概述
crawler4j是一款基于Java的轻量级单机开源爬虫框架,最大的一个特点就是简单。另外也支持多线程、支持代理、可以过滤重复URL
基本上从加载jar到工程里面 通过修改示例的代码就可以简单的实现一个爬虫的全部功能,而这一切动作加起来都不需要超过半个小时。
爬虫安装
官方文档里面提到了两种方式,一种通过Maven安装(一种开发工具),但是因为这里又涉及到了一种新的工具的学习,有花费大量时间的可能,遂果断放弃。另外一种安装方式就是导入.jar包,通过开发版本链接然后加入到Java工程里面就可轻松完成(虽然整个jar包体积庞大达32M)
官方网址:https://github.com/yasserg/crawler4j
jar链接:https://github.com/yasserg/crawler4j/releases
爬虫使用
使用爬虫最基本要完成两个类:继承WebCrawler的MyCrawler类 以及可以控制多个爬虫的Controller类。
WebCrawler类:
这里要必须要做的是对于两个方法的重写
public boolean shouldVisit(Page referringPage, WebURL url)
public void visit(Page page)
shouldVisit方法决定一个给定的URL是否英爱访问,这里主要是通过对于模式的限制来实现的
visit:解析网页内容,page类包含了丰富的方法,可以利用这些方法得到网页的内容和属性。
例如:如果想爬取指定贵的页面,可以修改BasicCrawler的shouldVisit方法
private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|bmp|gif|jpe?g" + "|png|tiff?|mid|mp2|mp3|mp4"
+ "|wav|avi|mov|mpeg|ram|m4v|pdf" + "|rm|smil|wmv|swf|wma|zip|rar|gz))$");
/**
* 是否抓取页面
*/
@Override
public boolean shouldVisit(WebURL url) {
String href = url.getURL().toLowerCase();
return !FILTERS.matcher(href).matches() && href.startsWith("http://www.ics.uci.edu/");
}
Controller类:
这个类用来控制爬虫,首先在这个类中addseed,然后开启多个爬虫,并且不断监听各个爬虫的存活状态。
在controller类中,可以设置爬虫的相关属性
/* * 爬取时数据临时存放目录. */
String crawlStorageFolder = "D:/tmp";
/* * 爬取线程数,即同时有多少个爬虫工作. */
int numberOfCrawlers = 5;
爬取指定的网站:
/*
* 添加入口URL
*/
controller.addSeed("http://www.ics.uci.edu/");
controller.addSeed("http://www.ics.uci.edu/~lopes/");
controller.addSeed("http://www.ics.uci.edu/~welling/");
/*
* 开始工作
*/
controller.start(BasicCrawler.class, numberOfCrawlers);
另外在controller里面还可以设置爬取的数量以及爬取的深度
/*
* 深度,即从入口URL开始算,URL是第几层。如入口A是1,从A中找到了B,B中又有C,则B是2,C是3
*/
config.setMaxDepthOfCrawling(2);
/*
* 最多爬取多少个页面
*/
config.setMaxPagesToFetch(1000);
这样就实现了一个简单的爬虫,但是在我们的项目里面必定会涉及到深层次的功能,例如爬取记录的保存与重新载入(避免每次运行之间不能避免重复),以及爬取不能解析的格式的文件 这些功能都还有待研究 请期待后续更新
Crawler4j学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- SO从 \u 这样的字符串 构建对象
ShowMessage(SO('\u4F18\u8D28\u670D\u52A112').AsString); 正确 得到 优质服务12 ShowMessage(so( 个数字,后面的中文未能解析出.
- 自定义圆的半径layout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...
- iOS 设计模式之工厂模式
iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...
- hdu 2080
ps:水题...求夹角...先求出COS,然后用acos 代码: #include "stdio.h" #include "math.h" int main() ...
- 技术分享:如何用Solr搭建大数据查询平台
0×00 开头照例扯淡 自从各种脱裤门事件开始层出不穷,在下就学乖了,各个地方的密码全都改成不一样的,重要帐号的密码定期更换,生怕被人社出祖宗十八代的我,甚至开始用起了假名字,我给自己起一新网名”兴才 ...
- 简单学习:repo入门
一:关于repo repo是Google开发的用于管理Android版本库的一个工具,repo并不是用于取代git,而是用Python对git进行了一定的封装,简化了对多个Git版本库的管理.对于re ...
- 关于EOF的种种。
EOF读取数据是读取一个向下进行一次,知道没有数据可以读取. EOF的使用,用while和eof的
- BZOJ 2442 修剪草坪
NOIP的时候一定要看清楚数据范围. #include<iostream> #include<cstdio> #include<cstring> #include& ...
- 解决远程桌面链接时出现"The RPC server is unavailable."或"RPC服务器不可用"的问题
解决远程桌面链接时出现"The RPC server is unavailable."或"RPC服务器不可用"的问题 解决远程桌面链接时出现"The ...
- Newspaper Headline_set(upper_bound)
Description A newspaper is published in Walrusland. Its heading is s1, it consists of lowercase Lati ...