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

Java實現(xiàn)提取HTML文件中的文本內(nèi)容

 更新時間:2024年04月25日 08:39:52   作者:Eiceblue  
從?HTML?文件中提取文本內(nèi)容是數(shù)據(jù)抓取中的一個常見任務(wù),本文主要和大家分享了如何使用免費?Java?API?從HTML?文件中提取文本內(nèi)容,需要的可以參考下

從 HTML 文件中提取文本內(nèi)容是數(shù)據(jù)抓取中的一個常見任務(wù),你可以將提取的文本信息用于編制報告、進行數(shù)據(jù)分析或其他處理。本文分享如何使用免費 Java API 從HTML 文件中提取文本內(nèi)容。

安裝免費Java庫

要通過Java提取HTML文本,需要用到Free Spire.Doc for Java免費庫。以下提供兩種安裝方式:

1. 通過Maven倉庫安裝:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.doc.free</artifactId>
    <version>5.2.0</version>
</dependency>

2. 下載Free Spire.Doc for Java庫,解壓后手動將Spire.Doc.jar添加到程序中。

使用Java從HTML文件中提取文本內(nèi)容

基本步驟:

  • 導(dǎo)入需要的類庫;
  • 通過 loadFromFile() 方法加載HTML文件;
  • 通過 getText() 方法獲取HTML文件中的文本內(nèi)容。
  • 創(chuàng)建一個 FileWriter 對象,將提取的文本內(nèi)容寫入一個txt文件中

示例代碼:

import com.spire.doc.Document;
import com.spire.doc.FileFormat;
 
import java.io.FileWriter;
import java.io.IOException;
 
public class ExtractTextFromHTML {
    public static void main(String[] args) throws IOException {
 
        //創(chuàng)建Document對象
        Document doc = new Document();
 
        //加載一個HTML文件
        doc.loadFromFile("input.html", FileFormat.Html);
 
        //獲取HTML文件中的文本
        String text = doc.getText();
 
        //將文本寫入TXT文件
        FileWriter fileWriter = new FileWriter("提取HTML文本.txt");
        fileWriter.write(text);
        fileWriter.close();
    }
}

運行結(jié)果 :

方法補充

除了上文的方法,小編還為大家整理了一個使用Java提取html文件中的文本內(nèi)容的工具類,需要的可以了解下

核心代碼

//核心代碼
String unescapeString = StringEscapeUtils.unescapeHtml4(inputString);
String text = HTML2Text.convert(unescapeString);
 
 
 
 
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.ParserDelegator;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.util.Stack;
import java.util.logging.Logger;
 
public class HTML2Text extends HTMLEditorKit.ParserCallback {
    private static final Logger log = Logger
            .getLogger(Logger.GLOBAL_LOGGER_NAME);
 
    private StringBuffer stringBuffer;
 
    private Stack<IndexType> indentStack;
 
    public static class IndexType {
        public String type;
        public int counter; // used for ordered lists
 
        public IndexType(String type) {
            this.type = type;
            counter = 0;
        }
    }
 
    public HTML2Text() {
        stringBuffer = new StringBuffer();
        indentStack = new Stack<>();
    }
 
    public static String convert(String html) {
        HTML2Text parser = new HTML2Text();
        Reader in = new StringReader(html);
        try {
            // the HTML to convert
            parser.parse(in);
        } catch (Exception e) {
            log.severe(e.getMessage());
        } finally {
            try {
                in.close();
            } catch (IOException ioe) {
                // this should never happen
            }
        }
        return parser.getText();
    }
 
    public void parse(Reader in) throws IOException {
        ParserDelegator delegator = new ParserDelegator();
        // the third parameter is TRUE to ignore charset directive
        delegator.parse(in, this, Boolean.TRUE);
    }
 
    @Override
    public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
        log.info("StartTag:" + t.toString());
        if (t.toString().equals("p")) {
            if (stringBuffer.length() > 0
                    && !stringBuffer.substring(stringBuffer.length() - 1)
                    .equals("\n")) {
                newLine();
            }
            newLine();
        } else if (t.toString().equals("ol")) {
            indentStack.push(new IndexType("ol"));
            newLine();
        } else if (t.toString().equals("ul")) {
            indentStack.push(new IndexType("ul"));
            newLine();
        } else if (t.toString().equals("li")) {
            IndexType parent = indentStack.peek();
            if (parent.type.equals("ol")) {
                String numberString = "" + (++parent.counter) + ".";
                stringBuffer.append(numberString);
                for (int i = 0; i < (4 - numberString.length()); i++) {
                    stringBuffer.append(" ");
                }
            } else {
                stringBuffer.append("*   ");
            }
            indentStack.push(new IndexType("li"));
        } else if (t.toString().equals("dl")) {
            newLine();
        } else if (t.toString().equals("dt")) {
            newLine();
        } else if (t.toString().equals("dd")) {
            indentStack.push(new IndexType("dd"));
            newLine();
        }
    }
 
    private void newLine() {
        stringBuffer.append("\n");
        for (int i = 0; i < indentStack.size(); i++) {
            stringBuffer.append("    ");
        }
    }
 
    @Override
    public void handleEndTag(HTML.Tag t, int pos) {
        log.info("EndTag:" + t.toString());
        if (t.toString().equals("p")) {
            newLine();
        } else if (t.toString().equals("ol")) {
            indentStack.pop();
            newLine();
        } else if (t.toString().equals("ul")) {
            indentStack.pop();
            newLine();
        } else if (t.toString().equals("li")) {
            indentStack.pop();
            newLine();
        } else if (t.toString().equals("dd")) {
            indentStack.pop();
        }
    }
 
    @Override
    public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) {
        log.info("SimpleTag:" + t.toString());
        if (t.toString().equals("br")) {
            newLine();
        }
    }
 
    @Override
    public void handleText(char[] text, int pos) {
        log.info("Text:" + new String(text));
        stringBuffer.append(text);
    }
 
    public String getText() {
        return stringBuffer.toString();
    }
 }

到此這篇關(guān)于Java實現(xiàn)提取HTML文件中的文本內(nèi)容的文章就介紹到這了,更多相關(guān)Java提取HTML文本內(nèi)容內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Idea2024創(chuàng)建Maven項目沒有src文件夾的解決步驟

    Idea2024創(chuàng)建Maven項目沒有src文件夾的解決步驟

    本文主要介紹了Idea2024創(chuàng)建Maven項目沒有src文件夾,文中通過圖文示例介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Java調(diào)用ChatGPT的實現(xiàn)代碼

    Java調(diào)用ChatGPT的實現(xiàn)代碼

    這篇文章主要介紹了Java調(diào)用ChatGPT的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • 淺談Java ThreadPoolExecutor的使用

    淺談Java ThreadPoolExecutor的使用

    今天我們來學(xué)習(xí)一下Java ThreadPoolExecutor的使用,文中有非常詳細的介紹及代碼示例,對正在學(xué)習(xí)Java的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-05-05
  • 利用java開發(fā)簡易版掃雷游戲

    利用java開發(fā)簡易版掃雷游戲

    這篇文章主要介紹了利用java開發(fā)一個丐版掃雷游戲,喜歡玩掃雷的小伙伴們一定要試試哦,對正在學(xué)習(xí)java開發(fā)的小伙伴們也有一定幫助,需要的朋友可以參考下
    2021-04-04
  • java開發(fā)微信公眾號支付

    java開發(fā)微信公眾號支付

    這篇文章主要給大家結(jié)合微信支付接口開發(fā)的實踐,從獲取用戶授權(quán)到各主要接口的使用方法等方面介紹微信支付的關(guān)鍵點技術(shù),有需要的小伙伴可以參考下
    2015-08-08
  • 詳解java WebSocket的實現(xiàn)以及Spring WebSocket

    詳解java WebSocket的實現(xiàn)以及Spring WebSocket

    這篇文章主要介紹了詳解java WebSocket的實現(xiàn)以及Spring WebSocket ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • Java Chaos Game噪聲游戲?qū)嵗a

    Java Chaos Game噪聲游戲?qū)嵗a

    這篇文章主要介紹了Java Chaos Game噪聲游戲?qū)嵗a,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • 在java的Map集合中,如何更改value的值

    在java的Map集合中,如何更改value的值

    這篇文章主要介紹了在java的Map集合中,如何更改value的值問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java中方法重載與重寫的區(qū)別與避坑指南

    Java中方法重載與重寫的區(qū)別與避坑指南

    在 Java 基礎(chǔ)面試中,重載(Overload)和重寫(Override)是必考知識點;在實際開發(fā)中,二者也是實現(xiàn)多態(tài)、代碼復(fù)用、業(yè)務(wù)擴展的核心基礎(chǔ),本文給大家介紹了Java中方法重載與重寫的區(qū)別與避坑指南,需要的朋友可以參考下
    2026-05-05
  • Mybatis從3.4.0版本到3.5.7版本的迭代方法實現(xiàn)

    Mybatis從3.4.0版本到3.5.7版本的迭代方法實現(xiàn)

    本文主要介紹了Mybatis從3.4.0版本到3.5.7版本的迭代方法實現(xiàn),包括主要的功能增強、不兼容的更改和修復(fù)的錯誤,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03

最新評論

平乐县| 姚安县| 吴忠市| 灵宝市| 蒲江县| 贺州市| 满洲里市| 桃江县| 潮州市| 华亭县| 务川| 泰州市| 奉化市| 敖汉旗| 莎车县| 耿马| 工布江达县| 安宁市| 沙田区| 枣阳市| 丰镇市| 绥江县| 巴彦县| 福海县| 夹江县| 莆田市| 兴城市| 雅江县| 大宁县| 巨野县| 资溪县| 吴堡县| 淮安市| 喀喇沁旗| 大关县| 林西县| 怀集县| 宜黄县| 自贡市| 米脂县| 巴林左旗|