亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java實現(xiàn)快速將HTML表格轉(zhuǎn)換成Excel

 更新時間:2023年05月29日 11:12:09   作者:夜郎king  
這篇文章主要為大家詳細介紹一種使用Java的快速將Web中表格轉(zhuǎn)換成Excel的方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

背景

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

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

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

一、初識Jsoup抓取

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

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

打開上面gdp百強榜表格中的div下table表格,找到如下的數(shù)據(jù)

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

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

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

這里我們采用Maven的jar進行包的依賴處理管理。因此先定義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、信息實體類的處理

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

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

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= {"縣級地區(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();
	}
}

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

下面是處理GDP數(shù)據(jù)的轉(zhuǎn)換代碼,如果不熟悉Jsoup可以先熟悉下相關(guān)語法,如果有類似Jquery的開發(fā)經(jīng)驗,對于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("發(fā)生異常,繼續(xù)下一輪循環(huán)");
		}
	}

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

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

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

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

1、采集過程分析

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

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

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

2、運行結(jié)果         

上述代碼運行完成后,在目的磁盤可以看到以下兩個文件,

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

 總結(jié)

本文以Java語言為編程語言,詳細講解了如何使用Jsoup對Web網(wǎng)頁知識進行爬取,結(jié)合EasyExcel將網(wǎng)頁表格轉(zhuǎn)換成Excel表格,同時文中給出了詳細的示例代碼。由于行文倉促,難免有誤,歡迎批評指正交流。

以上就是Java實現(xiàn)快速將HTML表格轉(zhuǎn)換成Excel的詳細內(nèi)容,更多關(guān)于Java HTML表格轉(zhuǎn)Excel的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot整合MyCat實現(xiàn)讀寫分離的方法

    SpringBoot整合MyCat實現(xiàn)讀寫分離的方法

    這篇文章主要介紹了SpringBoot整合MyCat實現(xiàn)讀寫分離的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • windows系統(tǒng)上如何進行maven安裝和配置方式

    windows系統(tǒng)上如何進行maven安裝和配置方式

    這篇文章主要介紹了windows系統(tǒng)上如何進行maven安裝和配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • java 格式化時間的示例代碼

    java 格式化時間的示例代碼

    這篇文章主要介紹了java 格式化時間的示例代碼,幫助大家更好的利用Java處理時間,感興趣的朋友可以了解下
    2020-12-12
  • IDEA?maven項目依賴無法解析問題

    IDEA?maven項目依賴無法解析問題

    這篇文章主要介紹了IDEA?maven項目依賴無法解析問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java log4j詳細教程

    Java log4j詳細教程

    日志是應(yīng)用軟件中不可缺少的部分,Apache的開源項目log4j是一個功能強大的日志組件,提供方便的日志記錄。在apache網(wǎng)站:jakarta.apache.org/log4j 可以免費下載到Log4j最新版本的軟件包
    2015-11-11
  • java實現(xiàn)String類型和Date類型相互轉(zhuǎn)換

    java實現(xiàn)String類型和Date類型相互轉(zhuǎn)換

    很多人表示,java將string類型轉(zhuǎn)為date類型不知道應(yīng)該怎樣做,本文就來介紹一下java實現(xiàn)String類型和Date類型相互轉(zhuǎn)換,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • 一篇文章帶你認識Java8接口的默認方法

    一篇文章帶你認識Java8接口的默認方法

    這篇文章主要給大家介紹了如何通過一篇文章帶你認識Java8接口的默認方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • java HashMap 的工作原理詳解

    java HashMap 的工作原理詳解

    本文主要介紹java HashMap 的資料,這里整理了相關(guān)資料,并詳細說明了HashMap的用法,有需要的小伙伴可以參考下
    2016-09-09
  • Java利用深度搜索解決數(shù)獨游戲詳解

    Java利用深度搜索解決數(shù)獨游戲詳解

    數(shù)獨是一項非常簡單的任務(wù)。玩家需要根據(jù)9×9盤面上的已知數(shù)字,推理出所有剩余空格的數(shù)字,并滿足每一行、每一列、每一個粗線宮(3*3)內(nèi)的數(shù)字均含1-9,不重復(fù)。本文將利用Java編寫一個程序來解決給定的數(shù)獨任務(wù),感興趣的可以動手嘗試一下
    2022-08-08
  • 基于java中byte數(shù)組與int類型的轉(zhuǎn)換(兩種方法)

    基于java中byte數(shù)組與int類型的轉(zhuǎn)換(兩種方法)

    下面小編就為大家?guī)硪黄趈ava中byte數(shù)組與int類型的轉(zhuǎn)換(兩種方法)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08

最新評論