前言
这久做的要整理疫情开始以来到现在的疫情数据,今年元旦放假,正好有时间来解决这个事。经过两天的奋斗,各省份所有的历史数据我均已收集完成。上次只是收集了贵州省的,后来我发现数据和爬虫代码还有待优化,所以花了一天的时间对原来的代码进行优化和补充。所以本次收集的数据更加的系统化、更加准确和更加完整。
数据获取
本次爬虫代码的编写依旧是基于springboot框架,代码相较上次也更加的稳定,运行爬虫系统代码可以很容易的获取到所有的历史数据。
收集的数据存储在mysql数据库中,这需要在数据库中建34张数据表来存储对应的历史数据如下图所示:
爬虫系统的mybatis的部分代码如下:
本部分的代码编写并不难,只是需要细心一些,别把对应数据库的表明弄混了。
爬虫爬取网页的主要部分是在系统的服务层实现,整体代码结构如下:
在将数据写入数据库的方法中需要做一个判断,判断省份以找到数据库中对应的数据表存储数据:
系统中主要获取数据的代码如下
public String PostData(String URL,String province){
try{
Connection connection = Jsoup.connect(URL);
connection.header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36").ignoreContentType(true).execute();
Document document = connection.post();
ParseData(document.toString(),province);
}catch (IOException e){
System.out.println("出现异常"+e);
}
return null;
}
public String ParseData(String text,String province){
String re_text = "\\{\"ret\"(.*?)}]}";
Pattern pattern = Pattern.compile(re_text);
Matcher matcher = pattern.matcher(text);
if(matcher.find()){
JSONObject jsonObject = JSON.parseObject(matcher.group());
JSONArray jsonArray = (JSONArray) jsonObject.get("data");
for (int i=0;i<jsonArray.size();i++){
getEntityData((JSONObject) jsonArray.get(i),province);
}
}
return null;
}
以上只是爬虫的部分代码,仅供参考讨论,单独无法运行。若需要系统源代码请私信我。
数据结果展示
代码编写完成后下图是运行成功时的日志:
此时,数据已经爬取到数据库中了,以下是数据库中的数据:
这是其中一个省的历史表格数据。
下图则是将数据表从数据库中导出为Excel表格的形式
至此,全部的新冠疫情历史数据便获取完成。
之前我便提到过,此次用springboot框架实现爬虫系统,是为了使整个爬虫具有可定制化特点,后期可以对数据进行可视化分析,或者也可以直接下载为Excel表格的形式。可以使数据获取和数据分析可视化耦合。