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

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

【免费下载链接】crawler4j Open Source Web Crawler for Java 【免费下载链接】crawler4j 项目地址: https://gitcode.com/gh_mirrors/cr/crawler4j

Crawler4J是一个开源的Java网络爬虫框架,提供了简单易用的接口用于网络爬取。使用它,您可以在几分钟内设置一个多线程的网络爬虫程序。

项目概述

Crawler4J旨在为开发者提供一个简单易用的API,帮助他们构建自己的网络爬虫程序。该框架支持多线程爬取,能够处理动态网页和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 BasicCrawler extends WebCrawler {
    private static final Pattern IMAGE_EXTENSIONS = Pattern.compile(".*\\.(bmp|gif|jpg|png)$");

    private final AtomicInteger numSeenImages;

    public BasicCrawler(AtomicInteger numSeenImages) {
        this.numSeenImages = numSeenImages;
    }

    @Override
    public boolean shouldVisit(Page referringPage, WebURL url) {
        String href = url.getURL().toLowerCase();
        if (IMAGE_EXTENSIONS.matcher(href).matches()) {
            numSeenImages.incrementAndGet();
            return false;
        }
        return href.startsWith("https://www.ics.uci.edu/");
    }

    @Override
    public void visit(Page page) {
        int docid = page.getWebURL().getDocid();
        String url = page.getWebURL().getURL();
        String domain = page.getWebURL().getDomain();
        String path = page.getWebURL().getPath();
        String subDomain = page.getWebURL().getSubDomain();
        String parentUrl = page.getWebURL().getParentUrl();
        String anchor = page.getWebURL().getAnchor();

        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());
        }
    }
}

控制器配置

创建控制器类来管理爬虫的执行:

public class BasicCrawlController {
    public static void main(String[] args) throws Exception {
        CrawlConfig config = new CrawlConfig();
        
        // 设置爬虫数据存储文件夹
        config.setCrawlStorageFolder("/tmp/crawler4j/");
        
        // 设置礼貌延迟,避免对服务器造成过大压力
        config.setPolitenessDelay(1000);
        
        // 设置最大爬取深度
        config.setMaxDepthOfCrawling(2);
        
        // 设置最大页面爬取数量
        config.setMaxPagesToFetch(1000);
        
        // 是否包含二进制内容
        config.setIncludeBinaryContentInCrawling(false);
        
        // 设置可恢复爬取
        config.setResumableCrawling(false);
        
        // 出错时停止
        config.setHaltOnError(true);

        PageFetcher pageFetcher = new PageFetcher(config);
        RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
        RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
        CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);

        // 添加种子URL
        controller.addSeed("https://www.ics.uci.edu/");
        controller.addSeed("https://www.ics.uci.edu/~lopes/");
        controller.addSeed("https://www.ics.uci.edu/~welling/");

        int numberOfCrawlers = 8;
        AtomicInteger numSeenImages = new AtomicInteger();
        
        // 创建爬虫工厂
        CrawlController.WebCrawlerFactory<BasicCrawler> factory = () -> new BasicCrawler(numSeenImages);

        // 启动爬虫
        controller.start(factory, numberOfCrawlers);
    }
}

配置详解

Crawler4J提供了丰富的配置选项,让您能够根据具体需求定制爬虫行为。

爬取深度控制

默认情况下没有爬取深度限制,但您可以设置最大深度:

config.setMaxDepthOfCrawling(maxDepthOfCrawling);

SSL支持

启用SSL页面爬取:

config.setIncludeHttpsPages(true);

最大页面数量

设置要爬取的最大页面数量:

config.setMaxPagesToFetch(maxPagesToFetch);

二进制内容爬取

默认情况下二进制内容爬取是关闭的,如需启用:

config.setIncludeBinaryContentInCrawling(true);

礼貌策略

Crawler4J默认在请求之间等待至少200毫秒。您可以根据需要调整此参数:

config.setPolitenessDelay(politenessDelay);

代理配置

如果需要在代理后面运行爬虫:

config.setProxyHost("proxyserver.example.com");
config.setProxyPort(8080);

如需代理认证:

config.setProxyUsername(username);
config.setProxyPassword(password);

可恢复爬取

对于长时间运行的爬虫,可以启用可恢复爬取功能:

config.setResumableCrawling(true);

应用场景

Crawler4J适用于多种应用场景:

  • 数据挖掘:从网站中提取特定的数据或信息
  • 网站监控:定期检查某个网站的更新情况
  • 搜索引擎索引:建立小型搜索引擎来索引指定网站
  • 社交网络分析:收集并分析社交媒体上的数据

项目示例

项目中提供了多个实用的示例代码:

  • 基础爬虫示例:完整的爬虫实现,包含详细配置
  • 图片爬虫示例:下载图片内容并存储在文件夹中
  • 本地数据收集:演示控制器如何从爬取线程收集数据统计信息
  • 多爬虫并发:展示如何同时运行多个不同的爬虫实例
  • 优雅关闭:演示如何通过发送关闭命令来优雅地终止爬取过程
  • PostgreSQL集成:将爬取内容保存到PostgreSQL数据库

技术特点

Crawler4J具有以下技术特点:

  • 轻量级设计:易于安装和使用,不依赖大型库
  • 易于扩展:提供多种接口,支持定制和扩展
  • 多线程支持:支持多线程爬取,提高爬取效率和速度
  • 异常处理:提供完善的异常处理机制,能够自动处理各种错误和异常情况

通过Crawler4J框架,开发者可以快速构建功能强大的网络爬虫程序,满足各种数据采集需求。该框架的简单易用性和强大功能使其成为Java网络爬虫开发的首选工具。

【免费下载链接】crawler4j Open Source Web Crawler for Java 【免费下载链接】crawler4j 项目地址: https://gitcode.com/gh_mirrors/cr/crawler4j

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

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

抵扣说明:

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

余额充值