JAVA获取html页面中表格的数据,并把它转存到数据库

2023-10-30

一、
使用技术:java、mysql
需要实现的功能:获取html页面中表格的数据,并且把它转存到mysql数据库中
实现思路:
1.通过java url处理中的url和urlconnection获取到html页面的信息
java url学习链接 :https://www.runoob.com/?s=java+url
2.通过BufferedReader(字符缓冲输入流),将html的信息存到一个变量中,方便后面通过正则表达式匹配所需要的值
3.通过使用java.util.regex包下面的Pattern 类和Matcher 类,我们可以得到html页面上我们需要的数据
java正则表达式链接:https://www.runoob.com/java/java-regular-expressions.html
4.将通过正则表达式匹配后获取的值,存入一个list集合中
5.通过循环将list集合中的内容分成相对应数据库每一列的值
6.通过jdbc连接mysql数据库中向里面存值
二、
代码片段:
测试类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;




public class test {

	//连接数据库部分
	Connection con;
	PreparedStatement ps;
	public void saveToMysql(testObject testObject){
		try {
			try {
				Class.forName("com.mysql.jdbc.Driver");
			} catch (Exception e) {
				// TODO: handle exception
				System.out.println("加载驱动失败");
			}
			try {
				String url="jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8";
				String user="root";
				String password="root";
				con=DriverManager.getConnection(url, user, password);
			} catch (Exception e) {
				// TODO: handle exception
				System.out.println("连接数据库失败");
			}
			
			
			String sql="insert  into 表名(Lawyer_Name,Lawyer_Status,Bar_Number,City,Admission_Date) values(?,?,?,?,?)";
			ps=con.prepareStatement(sql);
			ps.setString(1, testObject.getLawyer_Name());
			ps.setString(2, testObject.getStatus());
			ps.setInt(3,testObject.getBar_Number());
			ps.setString(4, testObject.getCity());
			ps.setString(5,testObject.getAdmission_Date());
			ps.execute();

			if(con!=null){
				con.close();
			}
			if(ps!=null){
				ps.close();
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	
	public static void main(String []args) throws IOException, ParseException{
			
			//实例化test类,以便调用其中的方法
			test test=new test();
			
			//URL(Uniform Resource Locator)统一资源定位符
			
			//创建一个给定的url
			URL url=new URL("html的链接地址");
			
			//打开一个链接并运行访问资源
			URLConnection connection=url.openConnection();
			
			//缓冲输入流来读数据源
			BufferedReader br=new BufferedReader(new InputStreamReader(connection.getInputStream()));
			
			//while循环取数据
			String str="";
			StringBuffer sb=new StringBuffer();
			while((str=br.readLine())!=null){
				sb.append(str);
			}
			//关闭缓冲输入流
			br.close();
			
			
			
			
			//将table标签里面的内容通过正则表达式取出
			String regex1="<td.*?>(.*?)</td>";
			Pattern pattern=Pattern.compile(regex1);
			String text=sb.toString();
			Matcher matcher=pattern.matcher(text);

			//声明一个list对象
			List<String> list=new ArrayList<String>();
			int count=0;
			while(matcher.find()){
				list.add(matcher.group(1));
				}
			
			testObject testObject=null;
			
			
			//定义数组来存放从list集合中分装的数据
			String[]na=new String[list.size()];
			String[]st=new String[list.size()];
			String[]b=new String[list.size()];
			String[]c=new String[list.size()];
			String[]a=new String[list.size()];
	
			for(int i=0;i*5<list.size();i++){
				na[i]=list.get(5*i);	
			}
			System.out.println(na[0]);
			
			for(int k=1;5*k-4<list.size();k++){
				st[k]=list.get(5*k-4);
			}
			
			
			System.out.println(st[1]);
			for(int m=2;m*5-8<list.size();m++){

				b[m]=list.get(m*5-8);
				
			}
			System.out.println(b[2]);
			for(int n=3;n*5-12<list.size();n++){

				c[n]=list.get(n*5-12);
			}
			System.out.println(c[3]);
			for(int o=4;o*5-16<list.size();o++){

				a[o]=list.get(o*5-16).substring(list.get(o*5-16).lastIndexOf("")-4);
			}
			System.out.println(a[4]);
			for(int i=0;i<list.size()/5;i++){
				testObject=new testObject();
				testObject.setLawyer_Name(na[i]);
				testObject.setStatus(st[i+1]);
				testObject.setBar_Number(Integer.parseInt(b[i+2]));
				testObject.setCity(c[i+3]);
				testObject.setAdmission_Date(a[i+4]);
				//调用向mysql数据库存数据的方法
				testObject.saveToMysql(testObject);
			}
			
			
			
			
			
			
	}
}

pojo类,用来存储数据库对应字段的值



public class testObject {
	private String Lawyer_Name;
	private String Status;
	private int Bar_Number;
	private String City;
	private String Admission_Date;
	
	public String getLawyer_Name() {
		return Lawyer_Name;
	}
	public void setLawyer_Name(String lawyer_Name) {
		Lawyer_Name = lawyer_Name;
	}
	public String getStatus() {
		return Status;
	}
	public void setStatus(String status) {
		Status = status;
	}
	
	public int getBar_Number() {
		return Bar_Number;
	}
	public void setBar_Number(int bar_Number) {
		Bar_Number = bar_Number;
	}
	public String getCity() {
		return City;
	}
	public void setCity(String city) {
		City = city;
	}
	public String getAdmission_Date() {
		return Admission_Date;
	}
	public void setAdmission_Date(String admission_Date) {
		Admission_Date = admission_Date;
	}
	
	
	
	
}

mysql数据库表

CREATE TABLE `tb_bar` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Lawyer_Name` varchar(500) NOT NULL COMMENT '律师名称',
  `Lawyer_Status` varchar(20) NOT NULL COMMENT '状态',
  `Bar_Number` int(11) NOT NULL COMMENT '工号',
  `City` varchar(20) NOT NULL COMMENT '城市',
  `Admission_Date` year(4) NOT NULL COMMENT '入职日期',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=336594 DEFAULT CHARSET=utf8;


实现结果:

html的表格数据
在这里插入图片描述
最后插入数据库的数据在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA获取html页面中表格的数据,并把它转存到数据库 的相关文章

随机推荐

  • Prometheus 安装部署监控JMX

    系统环境 系统版本 centos7 Prometheus版本 2 20 1 服务器ip 192 168 0 226 客户端ip 192 168 10 62 一 服务器端系统安装 192 168 0 226 1 将下载好的包文件上传到服务器并
  • 前端学习之原生JS实现attr方法的封装

    HTML代码 img src images 1 jpg alt JS代码 功能 1 参数为2个 设置 2 参数为1个 设置批量属性 获取属性 function attr property value console log property
  • ubuntu18.04配置Swin Transformer环境

    1 安装pytorch pip install torch 1 8 1 i https pypi douban com simple pip install torchvision 0 9 1 i https pypi douban com
  • 电脑打开计算机显示远程过程调用失败,win7系统电脑弹出提示“远程过程调用失败且未执行”的解决方法...

    win7系统使用久了 好多网友反馈说win7系统电脑弹出提示 远程过程调用失败且未执行 的问题 非常不方便 有什么办法可以永久解决win7系统电脑弹出提示 远程过程调用失败且未执行 的问题 面对win7系统电脑弹出提示 远程过程调用失败且未
  • java 原始套接字编程_套接字编程原理

    6 多路复用 select 功能 用来检测一个或多个套接字状态 格式 int PASCAL FAR select int nfds fd set FAR readfds fd set FAR writefds fd set FAR exce
  • android里面layer-list中的inset和clip到底有什么作用

    Inset Drawable 用于通过指定的间距把图片插入到XML中 它在View需要比自身小的背景时常用 有些像padding的作用 例子 第一步 drawable文件中建立inset drawable xml
  • DB与缓存一致性

    一般方案中的设计均有其缺陷 要么会产生脏数据 要么会产生不一致 不同的是代价和概率 更新数据时 是先删除缓存再更新DB 还是先更新DB再删除缓存 https blog csdn net qq 33999844 article details
  • unity 如何获取到屏幕中间_Unity UGUI获取鼠标在屏幕的准确点击位置

    想要获取鼠标在屏幕的准确点击位置 千万不要胡乱写 什么转化坐标系 什么Ray射线检测都是浮云 1 转化坐标系只是相对而言 并不能准确实现当前鼠标点击在屏幕的位置 2 Ray检测 hit是需要碰撞的 没碰撞 获取的是什么 0 0 0 所以 请
  • css的选择器

    一 基本标签 标签选择器 格式 标签名 h1 文本内容 h1 类名选择器 格式 类名
  • Eclipse中断点调试详解

    小编是刚学习Java两个月 在学习视频中看到老师玩断点6到飞起 自己也就各种查资料 实施并总结了一下断点的调试 找到需要设置断点的位置 你可能会问 我怎么知道在哪设置断点呢 如果你实在不知道在哪设置断点 那你完全可以多设置几个断点 单步调试
  • Power小型机概念输理

    一 基本概念 一 Power System服务器POWER AIX RISC CISC SMT QCM SP Hypervisor LPAR POWER Performance Optimization With Enhanced RISC
  • Vue的样式绑定

    一 绑定class 1 第一种 样式和数据的绑定 通过对象方式 v bind class设置一个对象 当isActivated为true的时候 div上会增加一个class属性 属性名称为activated 如果再在css里加上activa
  • 推荐10个堪称神器的学习网站,IT学习网站

    挑选了 10 个堪称神器的学习网站 推荐给大家 如果觉得不错的话 文末请点赞 01 大学资源网 大学资源网是一个完全免费并且功能非常强大的学习网站 它免费提供了丰富并且全面的学习视频教程 并且视频课程一直在更新 非常良心 我比较看重的是它里
  • 前几天面了个32岁的测试员,年薪50w问题基本都能回答上,应该刷了不少八股文···

    互联网行业竞争是一年比一年严峻 作为测试工程师的我们唯有不停地学习 不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水 进入心仪的企业 阿里 字节 美团 腾讯等大厂 所以 大家就迎来了一堆问题 自己目前的能力能不能够支撑自己晋升 如果
  • php原生发送邮件

  • C++(24)——语言级别提供的四种类型强转的方式

    前言 不同于C语言的类型转换的不安全性 无检查机制 比如没有关系的类型间的转换 C 提供了更多的类型转换方式 语言级别提供的四种类型强转的方式 const cast 去掉 指针或引用 常量属性的类型转换 static cast 提供编译器认
  • 深入理解Plasma(3):Plasma MVP

    这一系列文章将围绕以太坊的二层扩容框架 介绍其基本运行原理 具体操作细节 安全性讨论以及未来研究方向等 本篇文章主要介绍 Plasma 的一个最小实现 Plasma MVP Minima Viable Plasma 在上一篇文章中我们已经理
  • 默认显示DrawDefaultInspector and OnInspectorGUI

    Unity Trick 1 Make an inspector for any ScriptableObject Mark Wahnish on Aug 31 2015 Over the course of development I m
  • 恢复Redis中主、从库宕机

    1 什么是哨兵 哨兵是对Redis的系统的运行情况的监控 它是一个独立进程 功能有二个 监控主数据库和从数据库是否运行正常 主数据出现故障后自动将从数据库转化为主数据库 2 原理 单个哨兵的架构 多个哨兵的架构 多个哨兵 不仅同时监控主从数
  • JAVA获取html页面中表格的数据,并把它转存到数据库

    一 使用技术 java mysql 需要实现的功能 获取html页面中表格的数据 并且把它转存到mysql数据库中 实现思路 1 通过java url处理中的url和urlconnection获取到html页面的信息 java url学习链