惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Blog — PlanetScale
Blog — PlanetScale
Jina AI
Jina AI
C
Check Point Blog
V
V2EX
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
P
Proofpoint News Feed
A
About on SuperTechFans
D
DataBreaches.Net
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
云风的 BLOG
云风的 BLOG
MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
博客园_首页
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - 许雪里

AI 范式越迁:使用 XXL-BOOT SKILL 实现一句话直生业务 XXL-BOOT v2.1.0 发布:React 全新上线 · 全栈 TypeScript · AI+SKILL 驱动开发 人机Agent团队协同:从Managed Agents原理到Multica实践 AI规范编程:从SDD理念到Spec-Kit落地实践 开源AI Agent:OpenCode集成OMO原理及实践 AI编程实战:Claude Code + IDEA 的沉浸式编程方案 XXL-JOB v3.4.0 发布 | OpenClaw集成、合并调度、健壮性及体验增强 使用OpenClaw+Skill自动发布微信公众号文章 OpenClaw部署并集成QQ搭建自动化AI助理 使用Milvus搭配Ollama搭建RAG知识库 XXL-JOB v3.3.2 发布 | 优雅停机、Docker Compose、健壮性增强 XXL-CONF v2.2.0 | 分布式配置中心与注册中心 XXL-TOOL v2.4.0 发布 | 布隆过滤器、Excel流式读写、高性能BeanCopy XXL-JOB v3.3.1 发布 | 升级SpringBoot4、健壮性增强 XXL-JOB v3.3.0 | 分布式任务调度平台 XXL-TOOL v2.3.0 发布 | Java工具类库 XXL-TOOL v2.1.0 发布 | Java工具类库 XXL-JOB v3.2.0 | 分布式任务调度平台 XXL-BOOT v1.2.0 | 快速开发平台 XXL-CACHE v1.4.0 | 多级缓存框架 XXL-SSO v2.0.0 发布|单点登录框架 XXL-TOOL v2.0.0 发布 | Java工具类库 使用XXL-SSO实现登录认证以及权限管控 XXL-TOOL v1.5.0 发布 | Java工具类库
XXL-CRAWLER v1.5.0 | Java爬虫框架
许雪里 · 2025-08-15 · via 博客园 - 许雪里

Release Notes

  • 1、【升级】项目升级JDK17;
  • 2、【升级】代码兼容改造,适配JDK17;
  • 3、【升级】多个依赖升级至更新版本,如jsoup、selenium等。

引入Maven依赖

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-crawler</artifactId>
    <version>${最新稳定版}</version>
</dependency>

代码示例

注意:仅供学习测试使用,如有侵犯请联系删除
提示:更多测试代码可以前往仓库查看:测试代码目录

  • 爬虫名称:Gitee高星项目采集爬虫
  • 爬虫功能:一行代码启动多线程爬虫,分页方式扩散爬取“Gitee开源项目列表”,通过“注解式”自动提取页面数据,封装成PageVo输出;
XxlCrawler crawler = new XxlCrawler.Builder()
        .setUrls("https://gitee.com/explore/all?order=starred&page=1")                              // 设置爬虫入口URL
        .setAllowSpread(true)                                                                       // 允许爬虫扩散
        .setWhiteUrlRegexs("^https:\\/\\/gitee\\.com\\/explore\\/all\\?order=starred&page=[1-5]$")  // 设置爬虫扩散的URL白名单正则表达式,控制扩散范围
        .setThreadCount(3)                                                                          // 设置爬虫线程池大小
        .setPauseMillis(100)                                                                        // 设置爬虫每次抓取间隔时间,避免对下游压力过大
        .setPageParser(new PageParser<GiteeProjectPageVo>() {
            @Override
            public void afterParse(Response<GiteeProjectPageVo> response) {
                /**
                 * 获取爬虫结果数据:afterParse 会在多线程爬虫运行过程中实时输出爬虫结果数据,避免结尾一次性反馈造成大对象问题;可实时消费处理数据,如存储在DB等。
                 */
                if (response.getParseVoList() != null) {
                    for (GiteeProjectPageVo pageVo: response.getParseVoList()) {
                        logger.info("response.getHtml().baseUri()={}, PageDataVo={}", response.getHtml().baseUri(), pageVo);
                    }
                }
            }
        })
        .build();

crawler.start(true);

简介

XXL-CRAWLER 是一个轻量级Java爬虫框架。一行代码开发一个多线程爬虫,全注解方式采集页面数据至Java对象,拥有"多线程、全注解、JS渲染、代理、分布式扩展"等特性;

image

项目资料

特性

  • 1、简洁:API直观简洁,可快速上手;
  • 2、轻量级:底层实现仅强依赖jsoup,简洁高效;
  • 3、模块化:模块化的结构设计,可轻松扩展;
  • 4、全注解:支持通过注解提取页面数据,高效映射页面数据到PageVO对象,底层自动完成PageVO对象的数据抽取和封装返回;单个页面支持抽取一个或多个PageVO;
  • 5、多线程:线程池方式运行,提高采集效率;
  • 6、扩散全站:支持以现有URL为起点扩散爬取整站;
  • 7、JS渲染:通过扩展 "PageLoader" 模块,支持采集JS动态渲染数据。原生提供 Jsoup(非JS渲染,速度更快)、Selenium+ChromeDriver(JS渲染,兼容性高) 等多种实现,支持自由扩展其他实现;
  • 8、代理IP:对抗反采集策略规则WAF;
  • 9、动态代理:支持运行时动态调整代理池,以及自定义代理池路由策略;
  • 10、失败重试:请求失败后重试,并支持设置重试次数;
  • 11、异步:支持同步、异步两种方式运行;
  • 12、幂等去重:防止重复爬取;
  • 13、URL扩散过滤:支持设置页面白名单正则,过滤URL;
  • 14、分布式支持:通过扩展 "RunUrlPool" 模块,并结合Redis或DB共享运行数据可实现分布式。默认提供LocalRunUrlPool单机版爬虫;
  • 15、自定义请求信息,如:请求参数、Cookie、Header、UserAgent轮询、Referrer等;
  • 16、动态参数:支持运行时动态调整请求参数;
  • 17、超时控制:支持设置爬虫请求的超时时间;
  • 18、主动停顿:爬虫线程处理完页面之后进行主动停顿,避免过于频繁被拦截;