Crawler4J:Java开源网络爬虫框架详解
【免费下载链接】crawler4j Open Source Web Crawler for Java 项目地址: https://gitcode.com/gh_mirrors/cr/crawler4j
Crawler4J是一个开源的Java网络爬虫框架,提供了一个简单易用的接口来进行网络爬取。使用它,你可以在几分钟内设置一个多线程的网络爬虫。
项目概述
Crawler4J旨在为开发者提供一个简单高效的Web爬虫解决方案。它支持多线程爬取,能够处理动态网页和JavaScript,并提供灵活的配置选项以满足不同场景的需求。
安装指南
使用Maven
在pom.xml中添加以下依赖:
<dependency>
<groupId>edu.uci.ics</groupId>
<artifactId>crawler4j</artifactId>
<version>4.4.0</version>
</dependency>
使用Gradle
在build.gradle文件中添加以下依赖:
compile group: 'edu.uci.ics', name: 'crawler4j', version: '4.4.0'
快速入门
你需要创建一个继承WebCrawler的爬虫类。这个类决定哪些URL应该被爬取,并处理下载的页面。以下是一个示例实现:
public class MyCrawler extends WebCrawler {
private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|gif|jpg"
+ "|png|mp3|mp4|zip|gz))$");
@Override
public boolean shouldVisit(Page referringPage, WebURL url) {
String href = url.getURL().toLowerCase();
return !FILTERS.matcher(href).matches()
&& href.startsWith("https://www.ics.uci.edu/");
}
@Override
public void visit(Page page) {
String url = page.getWebURL().getURL();
System.out.println("URL: " + url);
if (page.getParseData() instanceof HtmlParseData) {
HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
String text = htmlParseData.getText();
String html = htmlParseData.getHtml();
Set<WebURL> links = htmlParseData.getOutgoingUrls();
System.out.println("Text length: " + text.length());
System.out.println("Html length: " + html.length());
System.out.println("Number of outgoing links: " + links.size());
}
}
}
如上所示,有两个主要函数需要重写:
- shouldVisit:这个函数决定给定的URL是否应该被爬取。在上面的例子中,不允许爬取.css、.js和媒体文件,只允许爬取'www.ics.uci.edu'域内的页面。
- visit:当URL的内容成功下载后调用这个函数。你可以轻松获取下载页面的URL、文本、链接、HTML和唯一ID。
更多示例
项目提供了多个实用的爬虫示例:
- 基础爬虫:完整的示例代码,包含更多细节
- 图片爬虫:从爬取域下载图片内容并存储在文件夹中的简单图片爬虫
- 线程数据收集:演示控制器如何从爬取线程收集数据/统计信息
- 多爬虫实例:展示两个不同的爬虫如何并发运行
- 优雅关闭:演示如何通过向控制器发送'shutdown'命令来优雅终止爬取
- Postgres/JDBC集成:将爬取内容保存到Postgres数据库
配置详解
控制器类有一个类型为CrawlConfig的强制参数。该类的实例可用于配置crawler4j。
爬取深度
默认情况下没有爬取深度限制。但你可以限制爬取深度。例如,假设你有一个种子页面"A",链接到"B","B"链接到"C","C"链接到"D"。因此,我们有如下的链接结构:
A -> B -> C -> D
由于"A"是种子页面,它的深度为0。"B"的深度为1,依此类推。你可以设置crawler4j爬取的页面深度限制。例如,如果将此限制设置为2,它将不会爬取页面"D"。要设置最大深度,你可以使用:
crawlConfig.setMaxDepthOfCrawling(maxDepthOfCrawling);
启用SSL
要启用SSL,只需:
CrawlConfig config = new CrawlConfig();
config.setIncludeHttpsPages(true);
最大爬取页面数
虽然默认情况下没有爬取页面数的限制,但你可以设置一个限制:
crawlConfig.setMaxPagesToFetch(maxPagesToFetch);
启用二进制内容爬取
默认情况下,爬取二进制内容(即图像、音频等)是关闭的。要启用爬取这些文件:
crawlConfig.setIncludeBinaryContentInCrawling(true);
礼貌性设置
crawler4j设计非常高效,能够非常快速地爬取域。然而,由于这违反了爬取策略并给服务器带来了巨大负载,从版本1.3开始,默认情况下crawler4j在请求之间至少等待200毫秒。但是,这个参数可以调整:
crawlConfig.setPolitenessDelay(politenessDelay);
代理设置
如果你的爬虫需要在代理后面运行,你可以使用:
crawlConfig.setProxyHost("proxyserver.example.com");
crawlConfig.setProxyPort(8080);
如果你的代理还需要身份验证:
crawlConfig.setProxyUsername(username);
crawlConfig.setProxyPassword(password);
可恢复爬取
有时你需要长时间运行爬虫。爬虫可能会意外终止。在这种情况下,可能需要恢复爬取。你可以使用以下设置恢复之前停止/崩溃的爬取:
crawlConfig.setResumableCrawling(true);
用户代理字符串
用户代理字符串用于向Web服务器表示你的爬虫。默认情况下,crawler4j使用以下用户代理字符串:
"crawler4j (https://github.com/yasserg/crawler4j/)"
但是,你可以覆盖它:
crawlConfig.setUserAgentString(userAgentString);
许可证
版权所有 (c) 2010-2018 Yasser Ganjisaffar
根据Apache License 2.0发布
【免费下载链接】crawler4j Open Source Web Crawler for Java 项目地址: https://gitcode.com/gh_mirrors/cr/crawler4j
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



