最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

 更新時(shí)間:2023年06月15日 11:40:20   作者:夜郎king  
在平時(shí)做系統(tǒng)項(xiàng)目時(shí),經(jīng)常會(huì)需要做導(dǎo)出功能,下面這篇文章主要給大家介紹了關(guān)于使用Java快速將Web中表格轉(zhuǎn)換成Excel的相關(guān)資料,需要的朋友可以參考下

背景

隨著后疫情時(shí)代的到來(lái),在過(guò)去的2022年,全國(guó)的經(jīng)濟(jì)情況,想必是很多學(xué)者和研究對(duì)象都非常關(guān)心的事。而這些數(shù)據(jù)在國(guó)家統(tǒng)計(jì)局網(wǎng)站上都有相應(yīng)的記錄。通過(guò)分析這些數(shù)據(jù),可以從某一個(gè)角度來(lái)驗(yàn)證和觀(guān)察當(dāng)下的經(jīng)濟(jì)情況。

全國(guó)共計(jì)有1279個(gè)縣級(jí)單位已經(jīng)披露了2022年GDP和一般公共預(yù)算收入數(shù)據(jù)情況,企業(yè)預(yù)警通根據(jù)這些數(shù)據(jù)整理出中國(guó)百?gòu)?qiáng)縣gdp排行榜和百?gòu)?qiáng)縣一般公共預(yù)算收入排行榜。其中昆山市以5006.66億元GDP蟬聯(lián)榜單榜首,江陰市、晉江市位列百?gòu)?qiáng)縣第二三位,長(zhǎng)沙縣是湖南省唯一進(jìn)入全國(guó)前十的(Top7)。來(lái)源:2023中國(guó)縣城GDP百?gòu)?qiáng)榜揭曉 2023中國(guó)百?gòu)?qiáng)縣排行榜一覽。

第一張圖是以圖片的形式發(fā)布的,第二種是采用Html的表格(table)形式展示的。在離線(xiàn)分析使用數(shù)據(jù)的時(shí)候非常不方便。作為程序猿,這一定難不倒您。我們可以采用網(wǎng)頁(yè)抓取的技術(shù)對(duì)數(shù)據(jù)進(jìn)行整理。本文將以Java語(yǔ)言為編程語(yǔ)言,講解使用Jsoup對(duì)Web網(wǎng)頁(yè)知識(shí)進(jìn)行爬取,文中給出了詳細(xì)的示例代碼,希望對(duì)大家有幫助。

一、初識(shí)Jsoup抓取

1、網(wǎng)頁(yè)結(jié)構(gòu)分析

在使用Jsoup對(duì)頁(yè)面進(jìn)行抓取時(shí),需要對(duì)網(wǎng)頁(yè)的結(jié)構(gòu)進(jìn)行初步的分析,便于制定相對(duì)應(yīng)的抓取策略。首先打開(kāi)瀏覽器,輸入目標(biāo)網(wǎng)站的地址,同時(shí)打開(kāi)F12進(jìn)入調(diào)試,找到目標(biāo)網(wǎng)頁(yè)的元素。

打開(kāi)上面gdp百?gòu)?qiáng)榜表格中的div下table表格,找到如下的數(shù)據(jù)

同理,對(duì)于一般公共預(yù)算收入的數(shù)據(jù)處理也是同樣的處理辦法,在此不再贅述。

二、Java開(kāi)發(fā)Jsoup抓取

1、引用Jsoup相關(guān)依賴(lài)包

這里我們采用Maven的jar進(jìn)行包的依賴(lài)處理管理。因此先定義Pom.xml,關(guān)鍵代碼如下所示:

<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、 信息實(shí)體類(lèi)的處理

對(duì)比發(fā)現(xiàn)兩個(gè)表格處理具體的指標(biāo)不一樣,前面的排名和縣名稱(chēng),所在省份名稱(chēng)都是一樣的。因此我們采用面向?qū)ο蟮脑O(shè)計(jì)方法對(duì)信息處理的類(lèi)進(jìn)行開(kāi)發(fā)。相應(yīng)的類(lèi)圖如下所示:

3、數(shù)據(jù)采集實(shí)體

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= {"序號(hào)"},index = 1)
	private Integer index;
 
	@ExcelProperty(value= {"縣級(jí)地區(qū)"},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();
	}
 
}

在上面的代碼中,將排序、縣級(jí)地區(qū)、省作為父類(lèi)抽象出來(lái),設(shè)計(jì)兩個(gè)子類(lèi):GDP類(lèi)和一般公共收入類(lèi)。這里需要注意的是,由于這里我們需要將采集的數(shù)據(jù)保存到本地的Excel表格中,這里我們采用EasyExcel作為技術(shù)生成組件。@ExcelProperty這個(gè)屬性中,我們定義了寫(xiě)入的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= {"一般公共預(yù)算收入(億元)"},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、實(shí)際爬取

下面是處理GDP數(shù)據(jù)的轉(zhuǎn)換代碼,如果不熟悉Jsoup可以先熟悉下相關(guān)語(yǔ)法,如果有類(lèi)似Jquery的開(kāi)發(fā)經(jīng)驗(yàn),對(duì)于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全國(guó)百?gòu)?qiáng)縣GDP排行榜 .xlsx";
            EasyExcel.write(fileName, Gdp.class).sheet("GDP百?gòu)?qiáng)榜").doWrite(list);
            System.out.println("完成...");
		} catch (Exception e) {
			System.out.println(e.getMessage());
			System.out.println("發(fā)生異常,繼續(xù)下一輪循環(huán)");
		}
	}

這里需要注意的是在jsoup中如何進(jìn)行網(wǎng)頁(yè)的元素定位及抓取。在上面這里,我們使用類(lèi)似jquery的Dom獲取方法。

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

通過(guò)這一行去獲取表格下的每一個(gè)tr,然后再循環(huán)每個(gè)td就可以獲取對(duì)應(yīng)的數(shù)據(jù)。 

三、過(guò)程分析及結(jié)果

1、采集過(guò)程分析

這里采用對(duì)源程序進(jìn)行debug的方法對(duì)網(wǎng)頁(yè)進(jìn)行抽絲剝繭的分析。使用jsou進(jìn)行網(wǎng)頁(yè)模擬訪(fǎng)問(wèn)

采用select(xxx)的方法獲取頁(yè)面元素,

獲取tr下的td單元格數(shù)據(jù),

2、運(yùn)行結(jié)果         

上述代碼運(yùn)行完成后,在目的磁盤(pán)可以看到以下兩個(gè)文件,

打開(kāi)上述兩個(gè)excel文件可以看到想要采集的數(shù)據(jù)已經(jīng)采集完畢,數(shù)據(jù)的順序也是完全按照網(wǎng)頁(yè)上的順序來(lái)進(jìn)行生成的。

總結(jié)

以上就是本文的主要內(nèi)容。本文將以Java語(yǔ)言為編程語(yǔ)言,詳細(xì)講解了如何使用Jsoup對(duì)Web網(wǎng)頁(yè)知識(shí)進(jìn)行爬取,結(jié)合EasyExcel將網(wǎng)頁(yè)表格轉(zhuǎn)換成Excel表格,同時(shí)文中給出了詳細(xì)的示例代碼。

到此這篇關(guān)于使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法的文章就介紹到這了,更多相關(guān)Java將Web表格轉(zhuǎn)換Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java反射之Java獲取方法信息實(shí)踐

    Java反射之Java獲取方法信息實(shí)踐

    本文介紹了通過(guò)Java反射機(jī)制獲取類(lèi)的信息,包括類(lèi)的名稱(chēng)、成員方法和成員變量,具體實(shí)現(xiàn)方式包括通過(guò)`getClass()`獲取類(lèi)類(lèi)型,使用`Method`類(lèi)獲取方法對(duì)象,使用`Field`類(lèi)獲取成員變量信息,文章還提供了完整實(shí)例代碼
    2026-05-05
  • Spring Boot支持Crontab任務(wù)改造的方法

    Spring Boot支持Crontab任務(wù)改造的方法

    這篇文章主要介紹了Spring Boot支持Crontab任務(wù)改造的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Java復(fù)合語(yǔ)句的使用方法詳解

    Java復(fù)合語(yǔ)句的使用方法詳解

    這篇文章主要介紹了Java編程中復(fù)合語(yǔ)句,結(jié)合相關(guān)的具體實(shí)例介紹了其用法,需要的朋友可以參考下
    2017-09-09
  • Java中線(xiàn)程組ThreadGroup與線(xiàn)程池的區(qū)別及示例

    Java中線(xiàn)程組ThreadGroup與線(xiàn)程池的區(qū)別及示例

    這篇文章主要介紹了Java中線(xiàn)程組與線(xiàn)程池的區(qū)別及示例,ThreadGroup是用來(lái)管理一組線(xiàn)程的,可以控制線(xiàn)程的執(zhí)行,查看線(xiàn)程的執(zhí)行狀態(tài)等操作,方便對(duì)于一組線(xiàn)程的統(tǒng)一管理,需要的朋友可以參考下
    2023-05-05
  • 查看JDK安裝路徑,一臺(tái)電腦安裝多個(gè)版本的JDK并切換使用方式

    查看JDK安裝路徑,一臺(tái)電腦安裝多個(gè)版本的JDK并切換使用方式

    文章介紹了如何查看JDK安裝路徑以及如何在一臺(tái)電腦上安裝和切換多個(gè)版本的JDK(JDK?8、JDK?11、JDK?17),內(nèi)容涵蓋了通過(guò)命令行查看JDK路徑的方法,以及如何下載、安裝和配置多個(gè)JDK版本,并通過(guò)修改環(huán)境變量來(lái)切換JDK版本
    2025-12-12
  • JavaWeb之Filter過(guò)濾器詳解

    JavaWeb之Filter過(guò)濾器詳解

    本篇文章主要介紹了JavaWeb之Filter過(guò)濾器詳解,實(shí)例分析了JavaWeb之Filter過(guò)濾器的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-03-03
  • Spring Security 最佳實(shí)戰(zhàn)指南

    Spring Security 最佳實(shí)戰(zhàn)指南

    文章介紹了SpringSecurity框架的核心概念、配置、最佳實(shí)踐、安全監(jiān)控、生產(chǎn)環(huán)境配置以及常見(jiàn)安全漏洞與解決方案,通過(guò)實(shí)際案例,展示了如何在電商平臺(tái)和金融系統(tǒng)中應(yīng)用SpringSecurity,保護(hù)數(shù)據(jù)安全,強(qiáng)調(diào)安全是一個(gè)持續(xù)過(guò)程,需要不斷更新和維護(hù),感興趣的朋友一起看看吧
    2026-04-04
  • Java excel數(shù)據(jù)導(dǎo)入mysql的實(shí)現(xiàn)示例詳解

    Java excel數(shù)據(jù)導(dǎo)入mysql的實(shí)現(xiàn)示例詳解

    今天教大家如何使用Java將excel數(shù)據(jù)導(dǎo)入MySQL,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴呢很有幫助,需要的朋友可以參考下
    2022-08-08
  • @Valid和@Validated注解校驗(yàn)以及異常處理方式

    @Valid和@Validated注解校驗(yàn)以及異常處理方式

    在Javaweb開(kāi)發(fā)中,防止數(shù)據(jù)庫(kù)惡意攻擊是至關(guān)重要的,盡管前端校驗(yàn)可以起到一定的篩選作用,但通過(guò)工具如postman直接對(duì)后端發(fā)起請(qǐng)求的情況仍然需要后端進(jìn)行嚴(yán)格的數(shù)據(jù)校驗(yàn),Java生態(tài)下,@Valid注解配合SpringBoot提供了一個(gè)便捷高效的后端數(shù)據(jù)校驗(yàn)方案
    2024-11-11
  • 微信公眾號(hào)獲取access_token的方法實(shí)例分析

    微信公眾號(hào)獲取access_token的方法實(shí)例分析

    這篇文章主要介紹了微信公眾號(hào)獲取access_token的方法,結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)微信公眾號(hào)獲取access_token的相關(guān)原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10

最新評(píng)論

乌海市| 凤凰县| 宁德市| 阳春市| 黑龙江省| 正宁县| 湘乡市| 黑龙江省| 特克斯县| 南京市| 寿宁县| 佛教| 夏河县| 厦门市| 临颍县| 苍梧县| 当阳市| 舞阳县| 敖汉旗| 平潭县| 济源市| 新宁县| 新昌县| 大宁县| 新河县| 彰武县| 七台河市| 宜都市| 渭源县| 锡林郭勒盟| 安西县| 巢湖市| 梁平县| 万州区| 全椒县| 突泉县| 三江| 浦城县| 苏尼特左旗| 汝阳县| 星座|