0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

几种去除HTML的方法

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-09-25 15:49 次阅读

在我平时的工作中,偶尔会用 Java 做一些解析HTML的工作。有的时候我需要删除所有的HTML标签,只保留纯文字内容。这个问题在做过一些爬虫工作的朋友来说很简单。下面来说说,我们平时使用到的集中解析的方法。

使用正则表达式

通过爬虫爬到的HTML内容,从程序角度来讲,就是一个字符串。我们可以对其按照纯文本处理的方式来处理。

我们在做文本处理的时候,第一个想到的就是正则表达式。从一个字符串中删除HTML,对于正则来说,还是比较简单的。毕竟还是有固定的格式,比如“<...>”。

我们常用的的正则就是 <[^>]> 或者 <.*?>

我们在使用正则的时候,需要注意的是正则默认是贪婪匹配。也就是说,正则表达式 <.*> 能够匹配到更多的HTML内容,而不是单个标签。

现在,让我们测试一下它是否能从HTML源中删除标签。

正则测试删除标签1

在我们测试删除HTML标签之前,首先让我们创建一个HTML例子,例如example1.html

< !DOCTYPE html >
< html >
< head >
    < title >这是标题< /title >
< /head >
< body >
    < p >
        如果应用程序X没有启动,可能的原因是< br/ >
        1. < a href="https://maven.apache.org" >Maven< /a >没有安装< br/ >
        2. 磁盘空间不足< br/ >
        3. 内存不足
    < /p >
< /body >
< /html >

现在,让我们写一个测试,用String.replaceAll()来删除HTML标签。

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

如果我们运行这个测试方法,我们会看到结果。

这是标题



        如果应用程序X没有启动,可能的原因是
        1.Maven没有安装
        2.磁盘空间不足
        3.没有足够的内存

输出结果保留了剥离后的HTML的空白处。我们在处理提取的文本时,可以很容易地删除或跳过这些空行或空白处。

正则测试删除标签2

我们刚才已经看到了,通过使用Regex来删除HTML标签是非常简单。但是粗暴的使用这种方法会有很多问题,我们不能预测最终的结果会是怎么样的。

例如,一个HTML文档可能有` 或标签,而我们可能不希望在结果中出现它们的内容。

此外,、甚至是标签中的文本可能包含 <>字符。如果是这种情况,我们的正则方法可能会出错。

现在,让我们看看另一个例子,比如example2.html

< !DOCTYPE HTML >
< html >
< head >
< title >这是标题< /title >
< /head >
< script >
// some js function
< /script >
< body >
< p >
如果应用程序X没有启动,可能的原因是< br/ >

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

Maven
< /a > 没有安装< br/ > 磁盘空间不足 (< 1G) < br/ >
内存不足(< 64MB)< br/ >
< /p >
< /body >
< /html >

现在我们有一个标签和 <字符在标签内。

如果我们对example2.html使用同样的方法,我们会得到如下内容。

这是标题
// some js function
如果应用程序X没有启动,可能的原因是

Maven
没有安装
2. 磁盘空间不足 (
3. 内存不足(

显然,由于"<"字符的存在,我们丢失了一些文本。所以正则在处理文本的时候并不是万能的。我们可以使用一些 HTML 解析器来做这些比较复杂的场景。

使用Jsoup

Jsoup 是一个流行的HTML解析库,如果想要从一个HTML文档中提取文本,我们可以简单地调用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());

如果我们让这个方法运行,它就会打印出来。

这是标题 如果应用程序X没有启动,可能的原因是 1.Maven没有安装 2.没有足够的(< 1G)磁盘空间 3.没有足够的(< 64MB)内存

从输出结果可知,Jsoup已经成功地从HTML文档中提取了文本。另外,元素中的文本已经被忽略了。

此外,默认情况下,Jsoup会删除所有的文本格式和空白处,比如换行符。

使用HTMLCleaner

HTMLCleaner 也是一个HTML解析库。

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

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

我们可以设置[各种参数](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);

运行一下,HTMLCleaner将产生这样的输出。

这是标题

如果应用程序X没有启动,可能的原因是:
1.Maven没有安装
2.没有足够的(< 1G)磁盘空间
3.内存不足(< 64MB)

我们可以看到,元素中的内容被忽略了,
标签转换为提取的文本中的换行符。另外, HTMLCleaner 保留了HTML的空白内容。

总结

在这篇文章中,我们学习了几种去除HTML的方法,我们需要注意的是,正则在文本处理的过程中并不是万能的。

`

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    102995
  • HTML
    +关注

    关注

    0

    文章

    273

    浏览量

    29295
  • 应用程序
    +关注

    关注

    37

    文章

    3136

    浏览量

    56398
收藏 人收藏

    评论

    相关推荐

    蚀刻后残留物和光刻胶的去除方法

    (BEOL)蚀刻中,在不去除低k材料的情况下去除抗蚀剂和残留物的选择性是非常具有挑战性的。概述了现状、问题和一些新的方法
    的头像 发表于 07-04 17:04 7351次阅读
    蚀刻后残留物和光刻胶的<b class='flag-5'>去除</b><b class='flag-5'>方法</b>

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

    三防漆固化后的线路板还有可能会返修,这就需要把漆膜去除掉,然后才能更换元件。这里敏通给大家列举几种比较常见的去除方法。一,加热法,不到万不得已不建议采用此
    发表于 05-28 10:44

    小编科普一种去除传输线的方法

    本文介绍了一种去除传输线的方法
    发表于 05-21 07:10

    基于HTML 标记的信息隐藏方法

    本文通过仔细分析 HTML 中标记的各种性质,提出了几种新的基于标记的隐藏信息的方法。这些方法的隐蔽性较好;综合运用这些方法可以获得较大的信
    发表于 08-24 11:18 21次下载

    HTML,HTML标准有哪些?

    HTML,HTML标准有哪些? HTML是一种用来网页制作的简单标记语言。但它并不是一种程序语言,它只是一种排版网页中资料显示的结构语
    发表于 03-22 10:29 1102次阅读

    动态HTML,什么是动态HTML

    动态HTML,什么是动态HTML 动态超文本标记语言 (DHTML) 大大降低的网络和服务器负载动态 HTML 添加到 HTML 演示语言丰富、 更加吸引人用户
    发表于 03-22 10:35 2871次阅读

    HTML DOM prompt()方法使用

    HTML DOM Window 对象 定义和用法 prompt() 方法用于显示可提示用户进行输入的对话框。 语法prompt(text,defaultText)参数描述 text 可选。要在
    发表于 11-28 15:06 4442次阅读
    <b class='flag-5'>HTML</b> DOM prompt()<b class='flag-5'>方法</b>使用

    JavaScript让HTML静态页面传值的方法

    JavaScript让HTML静态页面传值的方法有四种:1、JavaScript通过URL传值。2、JavaScript通过Cookie传值。3、JavaScript通过Window.open传值。4、JavaScript通过HTML
    发表于 01-09 15:24 5701次阅读
    JavaScript让<b class='flag-5'>HTML</b>静态页面传值的<b class='flag-5'>方法</b>

    去除阻焊膜的四种方法

    有几个因素对于决定采用何种方式来去除涂层是很有帮助的。是什么类型的阻焊膜?阻焊膜在电路板表面的什么位置?需去除的阻焊膜面积有多大?电路板是组装好的还是裸板?在确定最适合的去除方法之前,
    发表于 06-05 11:12 5065次阅读

    单幅航摄像片中的薄云去除方法综述

    单幅航摄像片中的薄云去除方法综述
    发表于 06-25 14:10 8次下载

    水痕去除的有效方法有哪些

    应用兆频超声波能量去除颗粒已被证明是一种非常有效的非接触式清洁方法。对晶片表面的清洁同样重要的是干燥过程。一种非常常见的方法是高速旋转干燥,但从减少颗粒和防止水痕的角度来看,这都是无效的。一种高性能的替代品是基于旋转力和马兰戈尼
    发表于 03-15 11:27 1062次阅读
    水痕<b class='flag-5'>去除</b>的有效<b class='flag-5'>方法</b>有哪些

    一种浇口蚀刻后的感光膜去除方法

    本发明涉及一种感光膜去除方法,通过使半导体制造工艺中浇口蚀刻后生成的聚合物去除顺畅,可以简化后处理序列,从而缩短前工艺处理时间,上述感光膜去除方法
    发表于 04-12 16:30 386次阅读
    一种浇口蚀刻后的感光膜<b class='flag-5'>去除</b><b class='flag-5'>方法</b>

    一种半导体制造用光刻胶去除方法

    本发明涉及一种去除光刻胶的方法,更详细地说,是一种半导体制造用光刻胶去除方法,该方法适合于在半导体装置的制造过程中进行吹扫以
    发表于 04-13 13:56 920次阅读
    一种半导体制造用光刻胶<b class='flag-5'>去除</b><b class='flag-5'>方法</b>

    HMDS与BARC一定要除去吗?有哪几种去除的方式?

    HMDS,BARC是光刻工序中比较常用的化学品,但是它们并不能用显影液除去,根据是什么?它们一定要除去吗?有哪几种去除的方式?
    的头像 发表于 12-22 10:29 611次阅读
    HMDS与BARC一定要除去吗?有哪<b class='flag-5'>几种</b><b class='flag-5'>去除</b>的方式?

    一种锂电池内水去除工艺方法

    一种锂电池内水去除工艺方法
    的头像 发表于 01-04 10:23 200次阅读
    一种锂电池内水<b class='flag-5'>去除</b>工艺<b class='flag-5'>方法</b>