首先需要用爬虫,在这我是用的java进行的爬取丁香园疫情数据 学习位置 https://blog.csdn.net/qq_27471405/article/details/104140132 ,在其基础上进行了修改以爬取全球数据) 爬取全球数据,并存到电脑上的MySQL。
package yiqing; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.security.Timestamp; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.net.ssl.HttpsURLConnection; import javax.xml.crypto.Data; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class WuhanService { public static void main(String[] args) throws IOException { getAreaStat(); getListByCountryTypeService2(); } // 根URL private static String httpRequset(String requesturl) throws IOException { StringBuffer buffer = null; BufferedReader bufferedReader = null; InputStreamReader inputStreamReader = null; InputStream inputStream = null; HttpsURLConnection httpsURLConnection = null; try { URL url = new URL(requesturl); httpsURLConnection = (HttpsURLConnection) url.openConnection(); httpsURLConnection.setDoInput(true); httpsURLConnection.setRequestMethod("GET"); inputStream = httpsURLConnection.getInputStream(); inputStreamReader = new InputStreamReader(inputStream, "utf-8"); bufferedReader = new BufferedReader(inputStreamReader); buffer = new StringBuffer(); String str = null; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return buffer.toString(); } /** * 获取全国各个省市的确诊、死亡和治愈人数 * * @return */ public static String getAreaStat() { String url = "https://ncov.dxy.cn/ncovh5/view/pneumonia"; String htmlResult = ""; try { htmlResult = httpRequset(url); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // System.out.println(htmlResult); // 正则获取数据 // 因为html的数据格式看着就像json格式,所以我们正则获取json String reg = "window.getAreaStat = (.*?)\}(?=catch)"; Pattern totalPattern = Pattern.compile(reg); Matcher totalMatcher = totalPattern.matcher(htmlResult); String result = ""; if (totalMatcher.find()) { result = totalMatcher.group(1); System.out.println(result); // 各个省市的是一个列表List,如果想保存到数据库中,要遍历结果,下面是demo JSONArray array = JSONArray.parseArray(result); DBUTIL l = new DBUTIL(); try { Connection con = l.lin("VData"); Statement stmt = con.createStatement(); Date date = new Date();//获得系统时间. SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss" ); String nowTime = sdf.format(date); for (int i = 0; i <= 30; i++) { com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject .parseObject(array.getString(i)); String provinceName = jsonObject.getString("provinceName"); String cityname1 = " "; String confirmed = jsonObject.getString("confirmedCount"); String cured = jsonObject.getString("curedCount"); String dead = jsonObject.getString("deadCount"); String suspect = jsonObject.getString("suspectedCount"); stmt.executeUpdate("insert into info2(Date,Province,City,Confirmed_num,Yisi_num,Cured_num,Dead_num) values('"+ nowTime + "','"+ provinceName + "','"+ cityname1 + "','" + confirmed + "','" + suspect +"','" + cured +"','" + dead +"')"); JSONArray array2 = jsonObject.getJSONArray("cities"); for (int j = 0; j < array2.size(); j++) { com.alibaba.fastjson.JSONObject jsonObject2 = com.alibaba.fastjson.JSONObject .parseObject(array2.getString(j)); String provinceName2 = jsonObject.getString("provinceName"); String cityname = jsonObject2.getString("cityName"); String confirmed2 = jsonObject2.getString("confirmedCount"); String cured2 = jsonObject2.getString("curedCount"); String dead2 = jsonObject2.getString("deadCount"); String suspect2 = jsonObject2.getString("suspectedCount"); stmt.executeUpdate("insert into info3(Date,Province,City,Confirmed_num,Yisi_num,Cured_num,Dead_num) values('"+ nowTime + "','"+ provinceName2 + "','"+ cityname + "','" + confirmed2 + "','" + suspect2 +"','" + cured2 +"','" + dead2 +"')"); } } stmt.close(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return result; } /** * 获取全球各个国家的确诊、死亡和治愈人数 * @return */ public static String getListByCountryTypeService2() { String url = "https://ncov.dxy.cn/ncovh5/view/pneumonia"; String htmlResult = ""; try { htmlResult = httpRequset(url); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // System.out.println(htmlResult); // 正则获取数据 // 因为html的数据格式看着就像json格式,所以我们正则获取json String reg = "window.getListByCountryTypeService2true = (.*?)\}(?=catch)"; Pattern totalPattern = Pattern.compile(reg); Matcher totalMatcher = totalPattern.matcher(htmlResult); String result = ""; if (totalMatcher.find()) { result = totalMatcher.group(1); System.out.println(result); // 各个省市的是一个列表List,如果想保存到数据库中,要遍历结果,下面是demo JSONArray array = JSONArray.parseArray(result); DBUTIL l = new DBUTIL(); try { Connection con = l.lin("VData"); Statement stmt = con.createStatement(); Date date = new Date();//获得系统时间. SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss" ); String nowTime = sdf.format(date); for (int i = 0; i <array.size(); i++) { com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject .parseObject(array.getString(i)); String continents =jsonObject.getString("continents"); String provinceName = jsonObject.getString("provinceName"); String confirmed = jsonObject.getString("confirmedCount"); String cured = jsonObject.getString("curedCount"); String dead = jsonObject.getString("deadCount"); String suspect = jsonObject.getString("suspectedCount"); stmt.executeUpdate("insert into info4(Date,Continents,Province,Confirmed_num,Yisi_num,Cured_num,Dead_num) values('"+ nowTime + "','"+ continents + "','"+ provinceName + "','" + confirmed + "','" + suspect +"','" + cured +"','" + dead +"')"); } stmt.close(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return result; } }
然后通过调取数据库数据进行图标和列表展示,效果如图。
移动端连接远程数据库实现数据查询展示
日期 | 起始时间 | 结束时间 | 活动 | 备注 |
3.17 | 14:00 | 15:30 | 听课 | |
15:40 | 18:00 | 编程 | 爬取数据并入库 | |
19:00 | 20:30 | 看视频 | 学习云服务器的构建 | |
3.18 | 13:00 | 18:00 | 学习+跟做 | 一边看视频一变创建自己的服务器 |
19:00 | 20:00 | 配置服务器 | 未完成配置 | |
3.19 | 14:30 | 15:30 | 配置服务器 | 完成基本配置与访问 |
15:50 | 18:30 | 安装数据库 | 失败 | |
19:30 | 20:00 | 学习 | 看视频,决定放弃云服务器 | |
3.20 | 19:00 | 22:00 | 配环境 | 内网穿透实现其他客户端的访问 |
3.21 | 7:00 | 10:00 | 编程 | 编写app项目 |
10:10 | 11:30 | 编程 | 建立app与数据库间的链接 |