Crawler4J:Java网络爬虫框架完整指南
【免费下载链接】crawler4j Open Source Web Crawler for Java 项目地址: https://gitcode.com/gh_mirrors/cr/crawler4j
Crawler4J是一个开源的Java网络爬虫框架,它提供了简单易用的接口来爬取网页内容。使用这个框架,你可以在几分钟内设置一个多线程的网络爬虫。
项目简介
Crawler4J旨在为开发者提供一个简洁的API,帮助他们构建自己的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、git等扩展名的URL,并且只接受以"https://www.ics.uci.edu/"开头的URL。
-
visit:这个函数在URL的内容成功下载后被调用。你可以轻松获取下载页面的url、文本、链接、html和唯一标识符。
你还需要实现一个控制器类,指定爬取的种子URL、存储中间爬取数据的文件夹以及并发线程数:
public class Controller {
public static void main(String[] args) throws Exception {
String crawlStorageFolder = "/data/crawl/root";
int numberOfCrawlers = 7;
CrawlConfig config = new CrawlConfig();
config.setCrawlStorageFolder(crawlStorageFolder);
PageFetcher pageFetcher = new PageFetcher(config);
RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);
controller.addSeed("https://www.ics.uci.edu/~lopes/");
controller.addSeed("https://www.ics.uci.edu/~welling/");
controller.addSeed("https://www.ics.uci.edu/");
CrawlController.WebCrawlerFactory<BasicCrawler> factory = MyCrawler::new;
controller.start(factory, numberOfCrawlers);
}
}
更多示例
项目提供了多个实用的示例程序:
- 基础爬虫:包含完整源代码的详细示例
- 图片爬虫:一个简单的图片爬虫,从爬取域下载图片内容并存储在文件夹中
- 线程数据收集:演示控制器如何从爬取线程收集数据/统计信息
- 多爬虫实例:展示两个不同的爬虫如何并发运行
- 优雅关闭:演示如何通过向控制器发送"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"
但是,你可以覆盖它:
crawlConfig.setUserAgentString(userAgentString);
实际应用场景
Crawler4J适用于多种实际应用场景:
- 数据挖掘:从网站中提取特定的数据或信息
- 网站监控:定期检查某个网站的更新情况
- 搜索引擎索引:建立一个小型搜索引擎来索引指定的网站
- 社交网络分析:收集并分析社交媒体上的数据
项目结构
Crawler4J项目采用清晰的模块化结构:
- crawler模块:包含核心爬虫逻辑和控制器
- fetcher模块:负责页面抓取和连接管理
- parser模块:处理各种格式的内容解析
- frontier模块:管理URL队列和文档ID
- robotstxt模块:处理robots.txt协议
- url模块:提供URL规范化和解析功能
技术特点
- 轻量级设计:易于安装和使用,不需要依赖任何大型库
- 易于扩展:提供了许多接口,可以根据需要进行定制和扩展
- 多线程支持:支持多线程爬取,可以提高爬取速度和效率
- 异常处理:提供了异常处理机制,能够自动处理各种错误和异常
Crawler4J是一个功能强大且易于使用的网络爬虫框架,无论你是初学者还是经验丰富的开发者,都能快速上手并构建出高效的网络数据采集程序。
【免费下载链接】crawler4j Open Source Web Crawler for Java 项目地址: https://gitcode.com/gh_mirrors/cr/crawler4j
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



