数据分析疫情图——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

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神的孩子都在歌唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值