crawler4j:轻量级多线程网络爬虫
来源:互联网 发布:算法交易软件 编辑:程序博客网 时间:2024/04/30 06:38
crawler4j是Java实现的开源网络爬虫。提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫。
安装
使用Maven
使用最新版本的crawler4j,在pom.xml中添加如下片段:
不使用Maven
crawler4j的JAR包可以从releases page和Maven Central下载。 需要注意crawler4j包有几个要依赖的包。在releases page下的crawler4j-X.Y-with-dependencies.jar包含了crawler4j的所有的依赖包。可以下载并添加到你的classpath中。
快速开始
使用crawler4j需要创建一个继承WebCrawler的爬虫类。下面是个简单的例子:
上面的例子覆盖了两个主要方法:
- shouldVisit:这个方法决定了要抓取的URL及其内容,例子中只允许抓取“www.ics.uci.edu”这个域的页面,不允许.css、.js和多媒体等文件。
- visit:当URL下载完成会调用这个方法。你可以轻松获取下载页面的url, 文本, 链接, html,和唯一id等内容。
实现控制器类以制定抓取的种子(seed)、中间数据存储的文件夹、并发线程的数目:
例子介绍
- Basic crawler:上述例子的全部源码及细节。
- Image crawler:一个简单的图片爬虫:从指定域下载图片并存在指定文件夹。这个例子演示了怎样用crawler4j抓取二进制内容。
- Collecting data from threads:这个例子演示了控制器怎样从抓取线程中收集数据/统计
- Multiple crawlers:这个例子演示了如何同时运行两个不同的爬虫。
- Shutdown crawling:这个例子演示了可以通过向控制器发送“shutdown”命令优雅的关闭抓取过程。
配置介绍
控制器类必须传一个类型为CrawlConfig的参数,用于配置crawler4j。下面描述了一些关于配置的细节。
抓取深度
默认情况下没有抓取深度的限制。可以通过配置来限制深度,比如,你有个种子页面A连接到B,B又连接到C,C又连接到D。结构如下:
A是种子页面深度为0,B为1,C、D以此类推。如:当设置抓取深度是2是,就不会抓取页面D。抓取最大深度通过以下代码配置:
页面抓取的最大数量
默认情况下没有抓取数量限制,可以通过以下代码配置:
其他限制
crawler4j是高效的,有着极快的抓取能力(比如:每秒可以抓取200个Wikipedia页面)。然而,这会给服务器带来很大的负荷(而服务器可能会阻断你的请求!)。所以,从1.3版开始,默认情况下,crawler4j每次请求前等待200毫秒。但是这个参数可以修改:
代理
使用下代码配置爬虫通过代理:
如果你的代理需要认证:
抓取恢复
有时爬虫需要运行很长时间,但中途可能意外终止了。这种情况下,可以通过以下配置恢复停止/崩溃的爬虫:
然而,这可能对抓取速度稍有影响。
User-agent字符串
User-agent字符串用于向web服务器表明你的爬虫。User-agent详解。 默认情况下crawler4j使用如下字符串: “crawler4j (https://github.com/yasserg/crawler4j/)” 你可以通过配置修改:
许可
Copyright (c) 2010-2015 Yasser Ganjisaffar
根据 Apache License 2.0发布
开源地址:https://github.com/yasserg/crawler4j
- crawler4j:轻量级多线程网络爬虫
- 轻量级多线程网络爬虫
- crawler4j java多线程网页爬虫
- Java网络爬虫crawler4j学习笔记<1>入门
- 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学习笔记<9> RuleSet类
- Java网络爬虫crawler4j学习笔记<10> HostDirectives类
- Java网络爬虫crawler4j学习笔记<11> RobotstxtConfig类
- Java网络爬虫crawler4j学习笔记<12> RobotstxtParser类
- Java网络爬虫crawler4j学习笔记<13> AuthInfo类
- Java网络爬虫crawler4j学习笔记<14> BasicAuthInfo类
- Java网络爬虫crawler4j学习笔记<15> FormAuthInfo类
- 【C++】STL--MAP
- 【13】编码、解码与乱码
- Ubuntu安装Percona Server报libc6版本依赖错误解决方法
- 如何在eclipse中实现参数传递给args[]中
- Orb匹配算法代码
- crawler4j:轻量级多线程网络爬虫
- Stick
- c#socket异步编程和断线重连
- (转)JAVA语言为什么能跨平台?
- 怎样让FireFox显示雅黑字体
- UVa 11825 状态压缩DP
- activity互相传值报错之activity互相传值报错
- 使用python实现简单的百度百科词条爬虫
- Android Studio基本介绍