数据分析疫情图——day9

好好学习,javaweb制作全国疫情展示,接下来要用java爬虫爬取数据,然后放到数据库,以下是今天学习的知识(身体不舒服简单整理一下),

第一天:数据分析疫情图——day1
第二天:数据分析疫情图——day2
第三天:数据分析疫情图——day3
第四天:数据分析疫情图——day4
第五天:数据分析疫情图——day5
第五天:数据分析疫情图——day6
第五天:数据分析疫情图——day7
第五天:数据分析疫情图——day8

在这里插入图片描述

一. 写入数据库

我们在昨天也就是第八天已经创建了一个实体类province,并且设计了它的数据库,还有tomacat服务器的使用那么我们现在将爬取到的数据导入数据库中

需要导入的包

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Test;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import cn.tedu.entity.Province;
import cn.tedu.util.JdbcUtil;
public class TestDataInsert {
	//集合List
	List<Province> proList = new ArrayList<Province>();
	/**
	 * 爬取数据:
	 * province   List<province>
	 * */
	public List<Province> getInfo() {
		//1、要爬取的网站
		String url = "https://ncov.dxy.cn/ncovh5/view/pneumonia";
		//2、爬取出整个页面
		Document doc = null;
		try {
			doc = Jsoup.connect(url)
					.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36")
					.get();
			//System.out.println(doc);
		} catch (IOException e) {
			e.printStackTrace();
		}
		String resultStr = doc.html();
		//System.out.println(result);
		//3、做数据的筛选
		String regex = "window.getAreaStat = (.*?)\\}(catch)";
		Pattern patt = Pattern.compile(regex);
		System.out.println(patt);
		Matcher matcher = patt.matcher(resultStr);
		//System.out.println(matcher);
		String result = "";
		if (matcher.find()) {
			result = matcher.group(1);
			//System.out.println(result);//
			//数据的解析----------json数据
			//TODO..
			ObjectMapper mapper = new ObjectMapper();

			try {
				JsonNode jn = mapper.readTree(result);
				//System.out.println(jn);
				for (int i = 0; i < jn.size(); i++) {
					//创建对象
					Province pro = new Province();
					String provinceName = jn.get(i).get("provinceName").asText();
					int currentConfirmedCount = jn.get(i).get("currentConfirmedCount").asInt();
					int confirmedCount = jn.get(i).get("confirmedCount").asInt();
					int deadCount = jn.get(i).get("deadCount").asInt();
					int curedCount = jn.get(i).get("curedCount").asInt();
					System.out.println("地区:" + provinceName + ", 现存确诊:" 
							+ currentConfirmedCount 
							+ ", 累计确诊:" + confirmedCount 
							+ ", 死亡数:" + deadCount 
							+ ", 治愈:" + curedCount);
					pro.setProvinceName(provinceName);
					pro.setConfirmedCount(confirmedCount);
					pro.setCurrentConfirmedCount(currentConfirmedCount);
					pro.setCuredCount(curedCount);
					pro.setDeadCount(deadCount);

					//将爬取出来的数据,放到集合中去。
					proList.add(pro);
					//取出来数据
					JsonNode jn1 = jn.get(i).get("cities");
					//System.out.println(jn1);
					for (int j = 0; j < jn1.size(); j++) {
						String cityName = jn1.get(j).get("cityName").asText();
						int confirmedCount1 = jn1.get(j).get("confirmedCount").asInt();
						int currentConfirmedCount1 = jn1.get(j).get("currentConfirmedCount").asInt();
						int curedCount1 = jn1.get(j).get("curedCount").asInt();
						int deadCount1 = jn1.get(j).get("deadCount").asInt();
						System.out.println("城市:" + cityName + ", 现存确诊:" 
								+ currentConfirmedCount1 
								+ ", 累计确诊:" + confirmedCount1
								+ ", 死亡数:" + deadCount1
								+ ", 治愈:" + curedCount1);
					}
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return proList;
	}

	@Test
	public void testInsert() {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		//使用jdbc将爬取出来的数据放到数据库中
		//jdbc获取连接--jdbcutil
		List<Province> proList = getInfo();
		try {
			conn = JdbcUtil.getConn();
			//传输器对象
			String sql = "insert into province values(?,?,?,?,?)";
			ps = conn.prepareStatement(sql);
			for (int i = 0; i < proList.size(); i++) {
				Province pro = proList.get(i);
				ps.setString(1, pro.getProvinceName());
				ps.setInt(2, pro.getCurrentConfirmedCount());
				ps.setInt(3, pro.getConfirmedCount());
				ps.setInt(4, pro.getDeadCount());
				ps.setInt(5, pro.getCuredCount());
				int rows = ps.executeUpdate();
				System.out.println("rows" + rows);
			}
			//结果集对象
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {//释放资源--jdbcutil
			JdbcUtil.release(conn, ps, rs);
		}
	}
}

在这里插入图片描述

二.Tomcat的安装和使用

2.1 安装

tomcat安装:以下是我老师博客连接,里面有详细教程

https://blog.csdn.net/weixin_43639180/article/details/107309531
在这里插入图片描述

在这里插入图片描述

2.2 使用

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

将javaweb项目放进去,就可以使用运行了
在这里插入图片描述

创建一个servlet

在这里插入图片描述
在这里插入图片描述

三.出现问题

3.1 cmd和navicat数据库乱码 为 ?

eciples在连接数据库这里添加:?characterEncoding=utf8

String url = "jdbc:mysql://localhost:3300/da01?characterEncoding=utf8";

cmd

可以查看以下三个连接的方法,我也是跟着一顿瞎操作弄好的,就是将数据库编码和eciples中的编码变成一样就行了

Java插入中文到数据库中文变成问号解决

修改表和字段的编码格式

中文乱码
到cmd中查看修改数据库的编码,以下是查看命令,发现character_set_database是latinl,修改为utf8

 show variables like '%char%' ;

在这里插入图片描述

SET character_set_database='utf8';
#查看数据表编码
show create table 数据表;
show variables like 'character_set_database';

navicat

如果navicat还是?,那么修改连接的编码为自动就可以了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

外加小知识

创建表的时候记得加上utf8

列如:

CREATE TABLE `city` (
  `CityName` varchar(20) DEFAULT NULL,
  `Name` varchar(20) DEFAULT NULL,
  `CurrentConfirmedCount` int(11) DEFAULT NULL,
  `ConfirmedCount` int(11) DEFAULT NULL,
  `DeadCount` int(11) DEFAULT NULL,
  `CuredCount` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

或者去navicat数据表里面修改:
在这里插入图片描述

在这里插入图片描述

3.2 启动server出现端口问题

修改以下端口就好

在这里插入图片描述

Several ports (8005, 8080, 8009) required by Tomcat v8.5 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process

以下是修改端口方法的连接:

https://www.php.cn/apache/463783.html

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页