终于搞懂如何用Java去除HTML标签了

Posted Java佳佳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终于搞懂如何用Java去除HTML标签了相关的知识,希望对你有一定的参考价值。

在我平时的工作中,偶尔会用 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文档可能有<script>或<style>标签,而我们可能不希望在结果中出现它们的内容。

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

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

<!DOCTYPE HTML>
<html>
<head>
    <title>这是标题</title>
</head>
<script>
    // some js function
</script>
<body>
    <p>
        如果应用程序X没有启动,可能的原因是<br/>
        1. <a
            id="link"
            href="http://maven.apache.org/">
            Maven
            </a> 没有安装<br/>
        2. 磁盘空间不足 (<1G) <br/>
        3. 内存不足(<64MB)<br/>
    </p>
</body>
</html>

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

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

   这是标题
    // some js function
        如果应用程序X没有启动,可能的原因是
        1. 
            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文档中提取了文本。另外,<script>元素中的文本已经被忽略了。

此外,默认情况下,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时跳过<script>元素。

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)

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

总结

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

不懂如何用 R 语言做数据挖掘?我们教你啊:)

微信号:imageqfh
只做最懂行业的语义分析服务商
不懂如何用 R 语言做数据挖掘?我们教你啊:)



在做「数据挖掘」时,我们首先关心的往往都是所使用工具的可伸缩性,即在面对大数据量场景时的计算能力。


而这一领域常常面临着关联规则挖掘、聚类、分类几大问题,R 语言作为一个完备的工程计算包,对它们提供了足够的支持,也因此成为从业者们一个不错的选择。


但具体该怎么进行呢?中国 R 语言大会讲师,著有《R语言与数据挖掘》、《R语言游戏数据分析》的「谢佳标」教授,通过 69 页 PPT 完整讲述了这一过程,这里分享给大家。


目录

    1 如何用 R 语言做数据清洗

        1.1 数据质量分析—缺失值处理

        1.2 数据质量分析—异常值分析


    2 如何用 R 语言进行建模


    3 常用数据挖掘算法的基本原理及 R 语言实现

        3.1 数据挖掘模型分类

        3.2 常用数据挖掘模型


    4 利用关联规则进行购物篮分析

        4.1 关联规则的R语言实现

        4.2 其他主要函数

        4.3 扩展方法包-arulesViz

        4.4 超市购物例子-数据理解

        4.5 可视化商品的支持度—商品的频率图

        4.6 可视化交易数据—绘制稀疏矩阵

        4.7 基于数据训练模型

        4.8 对关联规则处理


    5 利用 R 语言对游戏经济系统进行探索

        5.1 数据介绍

        5.2 相关性分析原理

        5.3 R语言实现

        5.4 分析结果

        5.5 聚类分析基本原理

        5.6 主成分分析


以下为 PPT 全文:


1


如何用 R 做数据清洗



不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)



2


如何用 R 进行数据建模



不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)



3


常用数据挖掘算法基本原理

及 R 语言实现



不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)



4


利用关联规则进购物篮分析



不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)



5


利用 R 语言对游戏经济

系统进行探索



不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)

不懂如何用 R 语言做数据挖掘?我们教你啊:)



 -END-


来源 | 大数据分析和人工智能


你可能感兴趣的...

(点击文/图即可查看相关内容)


回复关键词序号,获取更多干货

01 技术干货 | 02 热点事件

03 大 咖 说  | 04 往期精彩

05 产品试用 | 06 官网直达


点击下方“阅读原文”免费申请平台产品试用

以上是关于终于搞懂如何用Java去除HTML标签了的主要内容,如果未能解决你的问题,请参考以下文章

一文看懂如何用 Python 查看三维数据 (nii.gz格式) 的各种图像参数

不懂如何用 R 语言做数据挖掘?我们教你啊:)

java 如何去除html中的一个指定标签和指定标签里的内容

java 利用jsoup 如何去除一段代码中的所有html标签,只留纯文本

用java去除掉这段代码的HTML标签

java正则表达式去除html标签保留指定标签