# 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