项目类
属性列表
name:项目名称
url:项目链接
description:项目描述
star
fork
issue
爬虫类
1.获取入口页面
通过 OkHttp 库获取到网页的 HTML 形式内容
1.创建 Client 对象
2.创建一个 Request 对象
3.创建一个 Call 对象,负责进行一次网络访问操作
4.发送请求给服务器,获取到 Response 对象
5.判断响应是否成功
2.解析入口页面,获取项目列表
使用 Jsoup分析页面结构,得到项目的信息
1.创建 Document 对象,把 HTML 字符串转换为 Document 对象
2.使用 getElementByTag 方法获取到所有的 li 标签
3.再获取 li 标签中的 a 标签
该 li 标签不含项目的情况有:
- 该 li 标签有多个或者没有链接
- 项目链接不以 https://github.com 开头
- 项目链接存在黑名单中(黑名单保存着虽不符合以上条件但不是项目的链接)
4.获取标签中的内容保存在 project 对象中
3.遍历项目列表,调用 GitHub API获取项目信息
1.根据项目链接提取项目的仓库摘要(即仓库名和作者名)
https://github.com/doov-io/doov => doov-io/doov
特殊情况 : https://github.com/networknt/light-4j/
https://github.com/codenameone/CodenameOne/tree/master/vm
2.调用GitHub API 根据仓库摘要获取 JSON形式的仓库信息
4.解析 JSON 数据,得到 star 等信息
借助 TypeToken 把 JSON 数据转为键值对数据
Type type = new TypeToken<HashMap<String, Object>>(){}.getType();
HashMap<String, Object> map = gson.fromJson(jsonStr, type);
5.把 project 保存到数据库中
多线程版爬虫类
1.获取入口页面
2.解析入口页面,获取项目列表
3.创建线程池,每个线程处理调用 API 获取数据及分析项目数据
4.等待所有线程池任务结束后,结束线程池
5.保存到数据库
创建、连接及关闭数据库类
1.在云服务器上创建好数据库和表
2.通过 DataSource(数据源)获取Connection,加锁保证线程安全,同时双重 if 判定
3.关闭连接:先关闭 ResultSet,再是 PrepareStatement,最后是 Connection
数据库执行类
把一个 project 对象保存到数据库中
1.获取数据库连接
2.构造 preparedStatement 拼接 sql 语句
3.执行 SQL 语句,完成数据库插入操作
4.关闭连接
根据日期查找项目
1.获取数据库连接
2.构造 preparedStatement 拼接 sql 语句
3.执行 SQL 语句,得到结果集并保存
4.关闭连接
生成jar包并部署到云服务器中
Servlet类
请求格式:GET /allRank?date=2020xxxx
响应格式:JSON形式的数据
前端页面
1.通过https://echarts.apache.org/zh/builder.html在线定制图标得到echarts.min.js文件
2.获取当前日期
3.使用 JQuery 发送请求给服务器
4.收到响应绘制图表