好好学习,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中的编码变成一样就行了
中文乱码
到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
以下是修改端口方法的连接: