You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.8 KiB
5.8 KiB
Java爬虫综合项目(CLI + MVC + Command + 策略模式)
一、项目简介
本项目实现了一个命令行菜单式爬虫,支持爬取豆瓣电影、王者荣耀英雄、中国天气网天气等数据。采用MVC、命令模式、策略模式、多层结构,集成日志体系与异常分包,代码结构规范,易于扩展和维护。
二、项目结构
CrawlerMain2
├── .idea # IDEA 配置文件
├── out # 编译输出目录
└── src
├── command # 命令模式模块
│ ├── AnalyzeCommand
│ ├── CommandInvoker
│ ├── CrawlCommand
│ ├── HeroCrawlCommand
│ ├── MovieCrawlCommand
│ ├── WeatherAnalyzeCommand
│ └── WeatherCrawlCommand
├── controller # 控制器与上下文
│ └── CrawlerContext
├── crawler # 策略模式爬虫实现
│ ├── BaseCrawler
│ ├── Crawler
│ ├── HeroCrawler
│ ├── MovieCrawler
│ └── WeatherCrawler
├── exception # 自定义异常体系
├── model # 数据实体类
│ ├── Hero
│ ├── Movie
│ └── Weather
├── util # 工具类
│ └── DataUtil # JSON 导入导出、增量去重、文件 IO
├── view # 视图层(CLI 菜单交互)
│ └── CrawlerView
├── CrawlerMain # 程序入口
└── logback.xml # 日志配置
├── .gitignore # Git忽略文件配置
└── CrawlerMain2.iml # IDEA模块配置
三、功能介绍
- 命令行菜单,操作简单,支持多种数据源抓取
- 豆瓣电影、王者荣耀英雄、中国天气网天气数据采集
- 本地数据存储和分析统计
- MVC分层、命令模式、策略模式设计,扩展方便
- try-with-resources安全IO,保证资源释放与数据安全
- 支持JSON序列化导出(movie.json等)与数据备份
- 历史数据导入恢复功能,支持断点/回溯操作
- 增量抓取机制,自动去重,避免重复采集
- 日志体系与异常处理,项目健壮可追踪
四、依赖说明
- JDK 8及以上版本
- jsoup(网页解析)
- slf4j(日志接口)
- logback(日志实现)
- fastjson2(JSON处理框架,完成数据序列化/反序列化)
- IO相关类(java.io.File、FileReader、IOException等)实现文件操作
- 集合类(Set、HashSet、Stream),用于增量抓取与数据去重
推荐使用 Maven(pom.xml)管理依赖,添加如下:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.47</version>
</dependency>
如果不用 Maven,可手动下载相关 jar 包,并在 IDEA 的 Libraries 中添加。
五、运行说明(IntelliJ IDEA)
- 用 IDEA 打开项目根目录(包含 src/,logback.xml 等)。
- 配置 jsoup、slf4j、logback、fastjson2 依赖(建议用 Maven),或手动添加。
- 确认DataUtil.java里的数据存储路径有权限。如必要,修改为本地可用的目录。
- 右键CrawlerMain.java,选择“Run”,即可启动项目。
- 启动后按照命令行菜单提示输入数字操作,体验各类爬取、分析、导出、恢复功能:
1 爬取豆瓣电影
2 爬取王者荣耀英雄
3 爬取全国天气
4 电影、英雄数据分析(仅统计,不存储)
5 天气数据分析
6 导入历史数据
0 退出程序
程序在抓取时自动生成 JSON 文件 (movie.json),支持导入历史数据并增量去重。
六、主要设计与包说明
| 包/类 | 功能描述 |
|---|---|
| exception | 自定义异常体系 |
| command | 命令模式相关类(命令封装、调度) |
| controller | 控制器上下文(业务流转管理) |
| strategy | 策略接口与具体爬虫实现 |
| model | 数据实体类(电影、英雄、天气) |
| util/DataUtil.java | 数据存储、历史恢复、JSON导入导出与增量去重 |
| view | CLI菜单视图,交互展示 |
七、核心工具/新功能说明
- DataUtil 工具类
- 新增方法封装 JSON 序列化与反序列化(依赖 fastjson2 的 JSON 工具类)
- 支持文件安全读写(采用 try‑with‑resources 结构,自动释放 IO 资源)
- 增量抓取与去重,采用 Set/HashSet 结构自动过滤已采集的对象
- 历史数据校验与导入,支持断点恢复(即重新导入 movie.json,恢复进度)
八、常见问题
- 存储权限报错:请修改 DataUtil 的数据路径为本机有权限的盘符或目录
- 依赖缺失或报错:确保 jsoup、slf4j、logback、fastjson2 已配置到项目
- JSON导入导出异常:检查 movie.json 是否存在且格式正确,或依赖版本是否兼容
- 重复抓取问题:增量去重会自动过滤相同对象,手动修改数据时注意唯一性
- 出现 IOException:请检查文件路径、权限是否正常
九、扩展与二次开发说明
- 新增网站爬虫或数据实体:
- 新建 strategy 类(如 NewSiteCrawler.java)
- 新建 command 类,添加进菜单与调度
- 扩展 model 数据实体
- 导出和导入功能可支持更多格式,只需扩展 DataUtil 工具类即可
十、作者信息
- 姓名:郑诗艺
- 学号:202401070210
- 班级:大数据管理与应用2402班
- 日期:2026.5.24