Crawler4J:Java开源网络爬虫框架详解

Crawler4J:Java开源网络爬虫框架详解

【免费下载链接】crawler4j Open Source Web Crawler for Java 【免费下载链接】crawler4j 项目地址: 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 【免费下载链接】crawler4j 项目地址: https://gitcode.com/gh_mirrors/cr/crawler4j

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值