一种使用Java的快速将Web中表格转换成Excel的方法

这篇具有很好参考价值的文章主要介绍了一种使用Java的快速将Web中表格转换成Excel的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

        随着后疫情时代的到来,在过去的2022年,全国的经济情况,想必是很多学者和研究对象都非常关心的事。而这些数据在国家统计局网站上都有相应的记录。通过分析这些数据,可以从某一个角度来验证和观察当下的经济情况。

        全国共计有1279个县级单位已经披露了2022年GDP和一般公共预算收入数据情况,企业预警通根据这些数据整理出中国百强县gdp排行榜和百强县一般公共预算收入排行榜。其中昆山市以5006.66亿元GDP蝉联榜单榜首,江阴市、晋江市位列百强县第二三位,长沙县是湖南省唯一进入全国前十的(Top7)。来源:2023中国县城GDP百强榜揭晓 2023中国百强县排行榜一览。

一种使用Java的快速将Web中表格转换成Excel的方法

一种使用Java的快速将Web中表格转换成Excel的方法

         第一张图是以图片的形式发布的,第二种是采用Html的表格(table)形式展示的。在离线分析使用数据的时候非常不方便。作为程序猿,这一定难不倒您。我们可以采用网页抓取的技术对数据进行整理。本文将以Java语言为编程语言,讲解使用Jsoup对Web网页知识进行爬取,文中给出了详细的示例代码,希望对大家有帮助。

一、初识Jsoup抓取

1、网页结构分析

        在使用Jsoup对页面进行抓取时,需要对网页的结构进行初步的分析,便于制定相对应的抓取策略。首先打开浏览器,输入目标网站的地址,同时打开F12进入调试,找到目标网页的元素。

一种使用Java的快速将Web中表格转换成Excel的方法

         打开上面gdp百强榜表格中的div下table表格,找到如下的数据

一种使用Java的快速将Web中表格转换成Excel的方法

         同理,对于一般公共预算收入的数据处理也是同样的处理办法,在此不再赘述。

二、Java开发Jsoup抓取

1、引用Jsoup相关依赖包

        这里我们采用Maven的jar进行包的依赖处理管理。因此先定义Pom.xml,关键代码如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.yelang</groupId>
	<artifactId>jsoupdemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.11.3</version>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>easyexcel</artifactId>
			<version>3.0.5</version>
		</dependency>
	</dependencies>

</project>

2、 信息实体类的处理

        对比发现两个表格处理具体的指标不一样,前面的排名和县名称,所在省份名称都是一样的。因此我们采用面向对象的设计方法对信息处理的类进行开发。相应的类图如下所示:

一种使用Java的快速将Web中表格转换成Excel的方法

 3、数据采集实体

package com.yelang.entity;

import java.io.Serializable;
import com.alibaba.excel.annotation.ExcelProperty;
public class CountyBase implements Serializable {
	private static final long serialVersionUID = -1760099890427975758L;

	@ExcelProperty(value= {"序号"},index = 1)
	private Integer index;

	@ExcelProperty(value= {"县级地区"},index = 2)
	private String name;

	@ExcelProperty(value= {"所属省"},index = 3)
	private String province;

	public Integer getIndex() {
		return index;
	}

	public void setIndex(Integer index) {
		this.index = index;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getProvince() {
		return province;
	}

	public void setProvince(String province) {
		this.province = province;
	}

	public CountyBase(Integer index, String name, String province) {
		super();
		this.index = index;
		this.name = name;
		this.province = province;
	}

	public CountyBase() {
		super();
	}

}

         在上面的代码中,将排序、县级地区、省作为父类抽象出来,设计两个子类:GDP类和一般公共收入类。这里需要注意的是,由于这里我们需要将采集的数据保存到本地的Excel表格中,这里我们采用EasyExcel作为技术生成组件。@ExcelProperty这个属性中,我们定义了写入的Excel表头以及具体的排序。

package com.yelang.entity;

import java.io.Serializable;
import com.alibaba.excel.annotation.ExcelProperty;
public class Gdp extends CountyBase implements Serializable {

	private static final long serialVersionUID = 5265057372502768147L;

	@ExcelProperty(value= {"GDP(亿元)"},index = 4)
	private String gdp;
	
	public String getGdp() {
		return gdp;
	}

	public void setGdp(String gdp) {
		this.gdp = gdp;
	}

	public Gdp(Integer index, String name, String province, String gdp) {
		super(index,name,province);
		this.gdp = gdp;
	}

	public Gdp(Integer index, String name, String province) {
		super(index, name, province);
	}

}
package com.yelang.entity;

import java.io.Serializable;

import com.alibaba.excel.annotation.ExcelProperty;

public class Gpbr extends CountyBase implements Serializable {

	private static final long serialVersionUID = 8612514686737317620L;

	@ExcelProperty(value= {"一般公共预算收入(亿元)"},index = 4)
	private String gpbr;// General public budget revenue

	public String getGpbr() {
		return gpbr;
	}

	public void setGpbr(String gpbr) {
		this.gpbr = gpbr;
	}

	public Gpbr(Integer index, String name, String province, String gpbr) {
		super(index, name, province);
		this.gpbr = gpbr;
	}

	public Gpbr(Integer index, String name, String province) {
		super(index, name, province);
	}
}

 4、实际爬取

        下面是处理GDP数据的转换代码,如果不熟悉Jsoup可以先熟悉下相关语法,如果有类似Jquery的开发经验,对于Jsoup上手非常快。

static void grabGdp() {
		String target = "https://www.maigoo.com/news/665462.html";
		try {
            Document doc = Jsoup.connect(target)
                    .ignoreContentType(true)
                    .userAgent(FetchCsdnCookie.ua[1])
                    .timeout(300000)
                    .header("referer","https://www.maigoo.com")
                    .get();
            Elements elements = doc.select("#t_container > div:eq(3) table tr");
            List<Gdp> list = new ArrayList<Gdp>();
            for(int i = 1;i<elements.size();i++) {
            	Element tr = elements.get(i);//获取表头
            	Elements tds = tr.select("td");
            	Integer index = Integer.valueOf(tds.get(0).text());
            	String name = tds.get(1).text();
            	String province = tds.get(2).text();
            	String gdp = tds.get(3).text();
            	Gdp county = new Gdp(index, name, province, gdp);
            	list.add(county);
            }
            String fileName = "E:/gdptest/2023全国百强县GDP排行榜 .xlsx";
            EasyExcel.write(fileName, Gdp.class).sheet("GDP百强榜").doWrite(list);
            System.out.println("完成...");
		} catch (Exception e) {
			System.out.println(e.getMessage());
			System.out.println("发生异常,继续下一轮循环");
		}
	}

         这里需要注意的是在jsoup中如何进行网页的元素定位及抓取。在上面这里,我们使用类似jquery的Dom获取方法。

 Elements elements = doc.select("#t_container > div:eq(3) table tr");

        通过这一行去获取表格下的每一个tr,然后再循环每个td就可以获取对应的数据。 

三、过程分析及结果

1、采集过程分析

        这里采用对源程序进行debug的方法对网页进行抽丝剥茧的分析。使用jsou进行网页模拟访问

一种使用Java的快速将Web中表格转换成Excel的方法

         采用select(xxx)的方法获取页面元素,

一种使用Java的快速将Web中表格转换成Excel的方法

         获取tr下的td单元格数据,

一种使用Java的快速将Web中表格转换成Excel的方法

2、运行结果         

        上述代码运行完成后,在目的磁盘可以看到以下两个文件,

一种使用Java的快速将Web中表格转换成Excel的方法

         打开上述两个excel文件可以看到想要采集的数据已经采集完毕,数据的顺序也是完全按照网页上的顺序来进行生成的。

一种使用Java的快速将Web中表格转换成Excel的方法

一种使用Java的快速将Web中表格转换成Excel的方法

 总结

        以上就是本文的主要内容。本文将以Java语言为编程语言,详细讲解了如何使用Jsoup对Web网页知识进行爬取,结合EasyExcel将网页表格转换成Excel表格,同时文中给出了详细的示例代码。由于行文仓促,难免有误,欢迎批评指正交流。文章来源地址https://www.toymoban.com/news/detail-461185.html

到了这里,关于一种使用Java的快速将Web中表格转换成Excel的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中使用JXLS工具类导出复杂Excel表格

    前言    在项目开发中,我们会遇到各种文件导出的开发场景,但是这种情况并都不常用,于是本人将自己工作中所用的代码封装成工具类,旨在记录工具类使用方法和技术分享。 一、Jxls的简介    Jxls是一个简单的、轻量级的excel导出库,使用特定的标记在excel模板文件中来

    2024年02月03日
    浏览(29)
  • Excel·VBA表格横向、纵向相互转换

    如图:对图中区域 A1:M6 横向表格,转换成区域 A1:C20 纵向表格,即 B:M 列转换成每2列一组按行写入,并删除空行。同理,反向操作就是纵向表格转换成横向表格 实现方法1 对 本文图1 中,按“交期和交货数量”每5行2列为一组,依次按行写入,即按“交期”顺序排列 转换结果

    2024年02月14日
    浏览(30)
  • Java 使用hutool工具进行导出导入excel表格(代码很简单)

    创建一个Controller进行测试 

    2024年02月07日
    浏览(51)
  • 【一种使用浏览器读取本地excel、josn等数据文件的方法】Python+JavaScript+HTML实现

    一般来说,为了网络访问安全,浏览器是不能直接加载本地文件的,IE内核的浏览器提供了AX控件实现本地文件的读取,Chrome 86 版本后也提供了相应的API,但都存在使用限制和兼容性问题。有时开发者只是想利用浏览器编制一些简单的脚本完成一些任务,不想学习C、C++、Pyt

    2024年02月07日
    浏览(46)
  • 一种使用wireshark快速分析抓包文件amr音频流的思路方法

    解决方案: 1. 使用wireshark过滤amr,并导出原始数据文件; 2.使用ue的二进制编辑模式,编辑该文件,添加amr头,6个字节数据“#!AMR”,字节数据为 23 21 41 4D 52 0A 3.修正格式:通过抓包发现,amr的负载中,总是多一个字节用于描述rtp流信息,这个字节被导出到了原始数据中,每一

    2024年02月06日
    浏览(28)
  • Pandas快速合并多张excel表格

    目录 一、Excel表格命名存在规律的情况下 二、Excel表格文件名不规律的情况下 1.首先将所有excel表格放到一个文件夹下面 2.用pandas进行合并 三、身份证号合并乱码解决 最近用Pandas合并表格,发现效率非常高,现总结以下两种方法: 对身份证号码合并的时候,会因为编码方式

    2024年02月08日
    浏览(26)
  • 在Microsoft Excel中如何快速合并表格

    在 Excel 中分析数据时,在一个工作表中收集所有必要信息的频率是多少?几乎从来没有!当不同的数据分散在许多工作表和工作簿中时,这是一种非常常见的情况。幸运的是,有几种不同的方法可以将多个表中的数据组合成一个表,本教程将教你如何快速有效地做到这一点。

    2024年02月15日
    浏览(23)
  • 借助AI技术提高图片转换为Excel表格的效率与准确性

    在当今数字化时代,数据已经成为企业决策的重要依据。然而,在数据收集和整理过程中,许多企业面临着将图片中的表格转换为Excel格式的难题。这些图片可能来自扫描仪、网络、社交媒体等,数量庞大且格式不一,处理起来费时费力。为了解决这个问题,借助AI技术提高图

    2024年01月21日
    浏览(30)
  • Python 快速合并PDF表格转换输出CSV文件

    单位的刷脸考勤机后台系统做得比较差,只能导出每个部门的出勤统计表pdf,格式如下: 近期领导要看所有部门的考勤数据,于是动手快速写了个合并pdf并输出csv文件的脚本。 pypdf2,pdfplumber ,前者用于合并,后者用于读表格。 C: pip install pypdf2 Looking in indexes: https://pypi.tu

    2024年02月03日
    浏览(37)
  • 在java中如何使用openOffice进行格式转换,word,excel,ppt,pdf互相转换

    1.首先需要下载并安装openOffice,下载地址为: Apache OpenOffice download | SourceForge.net 2.安装后,可以测试下是否可用; 3.build.gradle中引入依赖: 4.创建工具类,启动openOffice服务的方法 5.结束openOffice服务的方法 7.在测试方法中进行格式转换,如,他可以是任意类型转换,如excel转换

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包