0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

幾種去除HTML的方法

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-25 15:49 ? 次閱讀

在我平時的工作中,偶爾會用 Java 做一些解析HTML的工作。有的時候我需要刪除所有的HTML標(biāo)簽,只保留純文字內(nèi)容。這個問題在做過一些爬蟲工作的朋友來說很簡單。下面來說說,我們平時使用到的集中解析的方法。

使用正則表達(dá)式

通過爬蟲爬到的HTML內(nèi)容,從程序角度來講,就是一個字符串。我們可以對其按照純文本處理的方式來處理。

我們在做文本處理的時候,第一個想到的就是正則表達(dá)式。從一個字符串中刪除HTML,對于正則來說,還是比較簡單的。畢竟還是有固定的格式,比如“<...>”。

我們常用的的正則就是 <[^>]> 或者 <.*?> 。

我們在使用正則的時候,需要注意的是正則默認(rèn)是貪婪匹配。也就是說,正則表達(dá)式 <.*> 能夠匹配到更多的HTML內(nèi)容,而不是單個標(biāo)簽。

現(xiàn)在,讓我們測試一下它是否能從HTML源中刪除標(biāo)簽。

正則測試刪除標(biāo)簽1

在我們測試刪除HTML標(biāo)簽之前,首先讓我們創(chuàng)建一個HTML例子,例如example1.html。

< !DOCTYPE html >
< html >
< head >
    < title >這是標(biāo)題< /title >
< /head >
< body >
    < p >
        如果應(yīng)用程序X沒有啟動,可能的原因是< br/ >
        1. < a href="https://maven.apache.org" >Maven< /a >沒有安裝< br/ >
        2. 磁盤空間不足< br/ >
        3. 內(nèi)存不足
    < /p >
< /body >
< /html >

現(xiàn)在,讓我們寫一個測試,用String.replaceAll()來刪除HTML標(biāo)簽。

String html = ... // load example1.html
String result = html.replaceAll("< [^ >]` >", "");
System.out.println(result);

如果我們運(yùn)行這個測試方法,我們會看到結(jié)果。

這是標(biāo)題



        如果應(yīng)用程序X沒有啟動,可能的原因是
        1.Maven沒有安裝
        2.磁盤空間不足
        3.沒有足夠的內(nèi)存

輸出結(jié)果保留了剝離后的HTML的空白處。我們在處理提取的文本時,可以很容易地刪除或跳過這些空行或空白處。

正則測試刪除標(biāo)簽2

我們剛才已經(jīng)看到了,通過使用Regex來刪除HTML標(biāo)簽是非常簡單。但是粗暴的使用這種方法會有很多問題,我們不能預(yù)測最終的結(jié)果會是怎么樣的。

例如,一個HTML文檔可能有` 或標(biāo)簽,而我們可能不希望在結(jié)果中出現(xiàn)它們的內(nèi)容。

此外,、、甚至是標(biāo)簽中的文本可能包含 <>字符。如果是這種情況,我們的正則方法可能會出錯。

現(xiàn)在,讓我們看看另一個例子,比如example2.html。

< !DOCTYPE HTML >
< html >
< head >
< title >這是標(biāo)題< /title >
< /head >
< script >
// some js function
< /script >
< body >
< p >
如果應(yīng)用程序X沒有啟動,可能的原因是< br/ >

< a
id="link"
href="http://maven.apache.org/" >

Maven
< /a > 沒有安裝< br/ > 磁盤空間不足 (< 1G) < br/ >
內(nèi)存不足(< 64MB)< br/ >
< /p >
< /body >
< /html >

現(xiàn)在我們有一個標(biāo)簽和 <字符在標(biāo)簽內(nèi)。

如果我們對example2.html使用同樣的方法,我們會得到如下內(nèi)容。

這是標(biāo)題
// some js function
如果應(yīng)用程序X沒有啟動,可能的原因是

Maven
沒有安裝
2. 磁盤空間不足 (
3. 內(nèi)存不足(

顯然,由于"<"字符的存在,我們丟失了一些文本。所以正則在處理文本的時候并不是萬能的。我們可以使用一些 HTML 解析器來做這些比較復(fù)雜的場景。

使用Jsoup

Jsoup 是一個流行的HTML解析庫,如果想要從一個HTML文檔中提取文本,我們可以簡單地調(diào)用Jsoup.parse(htmlString).text()。

在項目中使用的時候,我們首先需要添加 jsoup 的依賴庫,我們這里就通過maven的方式引入。

< dependency >
< groupId >org.jsoup< /groupId >
< artifactId >jsoup< /artifactId >
< version >1.14.3< /version >
< /dependency >

我們用 example2.html來測試一下。

String html = ... // load example2.html
System.out.println(Jsoup.parse(html).text());

如果我們讓這個方法運(yùn)行,它就會打印出來。

這是標(biāo)題 如果應(yīng)用程序X沒有啟動,可能的原因是 1.Maven沒有安裝 2.沒有足夠的(< 1G)磁盤空間 3.沒有足夠的(< 64MB)內(nèi)存

從輸出結(jié)果可知,Jsoup已經(jīng)成功地從HTML文檔中提取了文本。另外,元素中的文本已經(jīng)被忽略了。

此外,默認(rèn)情況下,Jsoup會刪除所有的文本格式和空白處,比如換行符。

使用HTMLCleaner

HTMLCleaner 也是一個HTML解析庫。

首先,我們需要在pom.xml中添加HTMLCleaner 依賴。

< dependency >
< groupId >net.sourceforge.htmlcleaner< /groupId >
< artifactId >htmlcleaner< /artifactId >
< version >2.25< /version >
< /dependency >

我們可以設(shè)置[各種參數(shù)](http://htmlcleaner.sourceforge.net/parameters.php)來控制HTMLCleaner的解析行為。我們在這里使用HTMLCleaner在解析example2.html時跳過元素。

String html = ... // load example2.html
CleanerProperties props = new CleanerProperties();
props.setPruneTags("script");
String result = new HtmlCleaner(props).clean(html).getText().toString();
System.out.println(result);

運(yùn)行一下,HTMLCleaner將產(chǎn)生這樣的輸出。

這是標(biāo)題

如果應(yīng)用程序X沒有啟動,可能的原因是:
1.Maven沒有安裝
2.沒有足夠的(< 1G)磁盤空間
3.內(nèi)存不足(< 64MB)

我們可以看到,元素中的內(nèi)容被忽略了,
標(biāo)簽轉(zhuǎn)換為提取的文本中的換行符。另外, HTMLCleaner 保留了HTML的空白內(nèi)容。

總結(jié)

在這篇文章中,我們學(xué)習(xí)了幾種去除HTML的方法,我們需要注意的是,正則在文本處理的過程中并不是萬能的。

`

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104089
  • HTML
    +關(guān)注

    關(guān)注

    0

    文章

    276

    瀏覽量

    32577
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3198

    瀏覽量

    57357
收藏 人收藏

    評論

    相關(guān)推薦

    蝕刻后殘留物和光刻膠的去除方法

    (BEOL)蝕刻中,在不去除低k材料的情況下去除抗蝕劑和殘留物的選擇性是非常具有挑戰(zhàn)性的。概述了現(xiàn)狀、問題和一些新的方法。
    的頭像 發(fā)表于 07-04 17:04 ?8289次閱讀
    蝕刻后殘留物和光刻膠的<b class='flag-5'>去除</b><b class='flag-5'>方法</b>

    三防漆固化后板返修的去除方法

    三防漆固化后的線路板還有可能會返修,這就需要把漆膜去除掉,然后才能更換元件。這里敏通給大家列舉幾種比較常見的去除方法。一,加熱法,不到萬不得已不建議采用此
    發(fā)表于 05-28 10:44

    小編科普一種去除傳輸線的方法

    本文介紹了一種去除傳輸線的方法。
    發(fā)表于 05-21 07:10

    基于HTML 標(biāo)記的信息隱藏方法

    本文通過仔細(xì)分析 HTML 中標(biāo)記的各種性質(zhì),提出了幾種新的基于標(biāo)記的隱藏信息的方法。這些方法的隱蔽性較好;綜合運(yùn)用這些方法可以獲得較大的信
    發(fā)表于 08-24 11:18 ?21次下載

    去除冰箱異味十大竅門

    去除冰箱異味十大竅門本文與大家分享一些常見的去除冰箱異味小方法,希望能對大家有所幫助。     方法1:
    發(fā)表于 02-21 17:51 ?1063次閱讀

    HTML,HTML標(biāo)準(zhǔn)有哪些?

    HTML,HTML標(biāo)準(zhǔn)有哪些? HTML是一種用來網(wǎng)頁制作的簡單標(biāo)記語言。但它并不是一種程序語言,它只是一種排版網(wǎng)頁中資料顯示的結(jié)構(gòu)語
    發(fā)表于 03-22 10:29 ?1173次閱讀

    動態(tài)HTML,什么是動態(tài)HTML

    動態(tài)HTML,什么是動態(tài)HTML 動態(tài)超文本標(biāo)記語言 (DHTML) 大大降低的網(wǎng)絡(luò)和服務(wù)器負(fù)載動態(tài) HTML 添加到 HTML 演示語言豐富、 更加吸引人用戶
    發(fā)表于 03-22 10:35 ?2899次閱讀

    HTML DOM prompt()方法使用

    HTML DOM Window 對象 定義和用法 prompt() 方法用于顯示可提示用戶進(jìn)行輸入的對話框。 語法prompt(text,defaultText)參數(shù)描述 text 可選。要在
    發(fā)表于 11-28 15:06 ?4557次閱讀
    <b class='flag-5'>HTML</b> DOM prompt()<b class='flag-5'>方法</b>使用

    JavaScript讓HTML靜態(tài)頁面?zhèn)髦档?b class='flag-5'>方法

    JavaScript讓HTML靜態(tài)頁面?zhèn)髦档?b class='flag-5'>方法有四種:1、JavaScript通過URL傳值。2、JavaScript通過Cookie傳值。3、JavaScript通過Window.open傳值。4、JavaScript通過HTML
    發(fā)表于 01-09 15:24 ?5831次閱讀
    JavaScript讓<b class='flag-5'>HTML</b>靜態(tài)頁面?zhèn)髦档?b class='flag-5'>方法</b>

    去除阻焊膜的四種方法

    有幾個因素對于決定采用何種方式來去除涂層是很有幫助的。是什么類型的阻焊膜?阻焊膜在電路板表面的什么位置?需去除的阻焊膜面積有多大?電路板是組裝好的還是裸板?在確定最適合的去除方法之前,
    發(fā)表于 06-05 11:12 ?5686次閱讀

    單幅航攝像片中的薄云去除方法綜述

    單幅航攝像片中的薄云去除方法綜述
    發(fā)表于 06-25 14:10 ?8次下載

    一種澆口蝕刻后的感光膜去除方法

    本發(fā)明涉及一種感光膜去除方法,通過使半導(dǎo)體制造工藝中澆口蝕刻后生成的聚合物去除順暢,可以簡化后處理序列,從而縮短前工藝處理時間,上述感光膜去除方法
    發(fā)表于 04-12 16:30 ?456次閱讀
    一種澆口蝕刻后的感光膜<b class='flag-5'>去除</b><b class='flag-5'>方法</b>

    python去除list中重復(fù)的數(shù)據(jù)

    Python是一個強(qiáng)大的編程語言,提供了許多解決問題的方法和功能。其中一個常見的問題是如何去除列表中的重復(fù)數(shù)據(jù)。在本文中,我們將詳細(xì)介紹Python中去除列表中重復(fù)數(shù)據(jù)的幾種方法,包括
    的頭像 發(fā)表于 11-21 15:49 ?1160次閱讀

    HMDS與BARC一定要除去嗎?有哪幾種去除的方式?

    HMDS,BARC是光刻工序中比較常用的化學(xué)品,但是它們并不能用顯影液除去,根據(jù)是什么?它們一定要除去嗎?有哪幾種去除的方式?
    的頭像 發(fā)表于 12-22 10:29 ?1726次閱讀
    HMDS與BARC一定要除去嗎?有哪<b class='flag-5'>幾種</b><b class='flag-5'>去除</b>的方式?

    三防漆去除方法有哪些?

    一站式PCBA智造廠家今天為大家講講PCB加工電路板三防漆如何清除?電路板三防漆清除方法。 電路板上的三防漆清除方法主要有以下幾種: 物理去除法: 機(jī)械清洗:使用機(jī)械設(shè)備或手動工具,如
    的頭像 發(fā)表于 05-03 09:17 ?660次閱讀