文章目录
基于网络爬虫的疫情数据可视化分析
0、前言
这个是去年9月份,大三上学期《大数据技术应该开发》的课程设计,这个作品我很早就想做了,但是因为课业加上项目,所以一直耽搁,所以就当成大数据课程作业做了。虽然做了一个月,只是因为个人技术菜,其实做了一小部分的功能,我也拿着这个作品去参加了很多的比赛,目前拿到了校内比赛“大数据应用大赛”的一等奖,还有另外一个比赛的三等奖。
其他有想法的小伙伴可以加上一些其他的功能,完善之后可以去参加计算机设计大赛,单拿这个去参赛还是比较单薄的,加上自己的想法完善一下也是一个不错的选择。
加上自己的想法,换上一个好看的模板(之前上传一些模板),继续优化优化,让内容更加丰富,就可以去参加很多比赛了。
资料包括:
- 后端源码(含数据库脚本)
- 前端源码
- 报告(50页左右,大概10000字)
资源下载:可视化大屏模板。
1、背景
唉……大学才四年,疫情占三年。
2、技术栈
2.1、后端
Spring Boot、MyBatis、Druid、HttpClient、Jsoup、Fastjson、MySQL、Maven。
2.2、前端
ECharts、Vue.js、Axios、JavaScript、CSS、HTML。
3、设计思路
3.1、本地开发阶段
基于爬虫技术在 https://ncov.dxy.cn/ncovh5/view/pneumonia 爬取的疫情数据,之后使用 Jsoup 解析器对数据进行解析处理得到原始的 JSON 数据,再将 JSON 数据转化为Java 实体类并进行持久化处理,基于ECharts对数据进行可视化展示。
3.2、上线部署阶段
为达到对疫情数据实时监控的效果,采用实时爬取数据的方式,开启 Spring Boot 的定时任务并将项目部署至阿里云服务器,于每日早上八点和晚上十点各爬取一次数据,并对数据进行处理和持久化操作,全天不间断地向前端输出接口,以保证数据的时效性、精确性。
4、实现效果
4.1、后端效果




4.2、前端效果


5、实现步骤
数据持久化使用MyBatis很简单,数据展示使用ECharts也没什么难度。
稍有难度就是数据的爬取和处理了,所以在此处简单地将一下。
5.1、导入依赖
后端项目目录。

首先,创建一个Spring Boot工程项目,导入HttpClient和Jsoup的依赖。

5.2、HttpClient爬取数据
TimeUtils.java工具类源码:
/**
* Author Mr.Zhang
* Date 2020/5/27 11:23
* Desc 时间工具类
*/
public abstract class TimeUtils {
public static String format(Long timestamp, String pattern) {
return FastDateFormat.getInstance(pattern).format(timestamp);
}
}
HttpUtils.java工具类源码:
/**
* Author Mr.Zhang
* Date 2021/9/10 16:05
* Desc 封装HttpClient工具,方便爬取网页内容
*/
@Component
public class HttpUtils {
//声明httpClient管理器对象(HttpClient连接池)
private static PoolingHttpClientConnectionManager cm = null;
private static RequestConfig config = null;
private static List<String> userAgentList = null;
//静态代码块会在类被加载的时候执行
static {
cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(20);
config = RequestConfig.custom()
.setSocketTimeout(10000)
.setConnectTimeout(10000)
.setConnectionRequestTimeout(10000)
.build();
userAgentList = new ArrayList<String>();
userAgentList.add("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36");
userAgentList.add("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:73.0) Gecko/20100101 Firefox/73.0");
userAgentList.add("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15");
userAgentList.add("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299");
userAgentList.add("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");
userAgentList.add("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0");
}
/**
* 获取页面的HTML的源码字符串
*
* @param url 页面的URL地址
* @return HTML的源码字符串
*/
public String getHtml(String url) {
//1.从连接池中获取HttpClient对象
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
//2.创建HttpGet对象
HttpGet httpGet = new HttpGet(url);
//3.设置请求配置对象和请求头
httpGet.setConfig(config);
httpGet.setHeader("User-Agent", userAgentList.get(new Random().nextInt(userAgentList.size())));
//4.发起请求
CloseableHttpResponse response = null;
try {
response = httpClient.execute(httpGet);
//5.获取响应内容
if (response.getStatusLine().getStatusCode() == 200) {
String html = "";
if (response.getEntity() != null) {
html = EntityUtils.toString(response.getEntity(), "UTF-8");
}
return html;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (response != null) {
try {
response.close()

这是一个使用SpringBoot、MyBatis和ECharts构建的大数据课程设计项目,实现了从丁香园网站爬取并实时更新新冠肺炎疫情数据,通过Jsoup解析JSON数据,存储到数据库并进行可视化展示。项目每天定时爬取两次数据,确保数据时效性和精确性,前端使用Vue.js和ECharts进行数据图表展示。
最低0.47元/天 解锁文章
811





