crawler4j:轻量级多线程网络爬虫

来源:互联网 发布:算法交易软件 编辑:程序博客网 时间:2024/04/30 06:38

crawler4j是Java实现的开源网络爬虫。提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫。

crawler4j

安装

使用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

0 0
原创粉丝点击