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.
 
 
ZhengShiyi b2a9745709 提交期末实验报告 3 weeks ago
..
.idea 提交期末实验报告 3 weeks ago
src 提交期末实验报告 3 weeks ago
.gitignore 提交期末实验报告 3 weeks ago
CrawlerMain2.iml 提交期末实验报告 3 weeks ago
README.md 提交期末实验报告 3 weeks ago

README.md

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)

  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