# 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)管理依赖,添加如下:
```xml
org.jsoup
jsoup
1.15.3
org.slf4j
slf4j-api
1.7.36
ch.qos.logback
logback-classic
1.2.11
com.alibaba.fastjson2
fastjson2
2.0.47
```
如果不用 Maven,可手动下载相关 jar 包,并在 IDEA 的 Libraries 中添加。
---
## 五、运行说明(IntelliJ IDEA)
1. 用 IDEA 打开项目根目录(包含 src/,logback.xml 等)。
2. 配置 jsoup、slf4j、logback、fastjson2 依赖(建议用 Maven),或手动添加。
3. 确认DataUtil.java里的数据存储路径有权限。如必要,修改为本地可用的目录。
4. 右键CrawlerMain.java,选择“Run”,即可启动项目。
5. 启动后按照命令行菜单提示输入数字操作,体验各类爬取、分析、导出、恢复功能:
````
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,恢复进度)
---
## 八、常见问题
1. 存储权限报错:请修改 DataUtil 的数据路径为本机有权限的盘符或目录
2. 依赖缺失或报错:确保 jsoup、slf4j、logback、fastjson2 已配置到项目
3. JSON导入导出异常:检查 movie.json 是否存在且格式正确,或依赖版本是否兼容
4. 重复抓取问题:增量去重会自动过滤相同对象,手动修改数据时注意唯一性
5. 出现 IOException:请检查文件路径、权限是否正常
---
## 九、扩展与二次开发说明
- 新增网站爬虫或数据实体:
- 新建 strategy 类(如 NewSiteCrawler.java)
- 新建 command 类,添加进菜单与调度
- 扩展 model 数据实体
- 导出和导入功能可支持更多格式,只需扩展 DataUtil 工具类即可
---
## 十、作者信息
- 姓名:郑诗艺
- 学号:202401070210
- 班级:大数据管理与应用2402班
- 日期:2026.5.24