上一章,我们已经实现了从网页代码文件中提取文字,但是我们发现,提取的文字中有很多空白行,如下图
这样,篇幅可能很长很长。现在我们有一个需要,就是能不能将这些空白行去除掉?本章就来研究这个问题。
首先,我们先对程序进行一下优化处理,把上一张最后程序中的自定义函数“去除html代码”,移动到通用函数库中。
上一章最后的程序如下
移动后程序变成下面这个样子
此时,自定义函数已经移到了通用函数库中。于是,我们看到,优化后的程序更加简单易懂,下面我们研究去除空行的问题。
按照以前的习惯,我们先对主程序进行下改造,改造后的主程序变成下面的模样
上面红线标注的这一行,就是我们新增加的内容。我们编写了一个函数,名字叫做去除空行,详细内容如下图,下面我们研究一下这个函数
第四行,我们定义的这个函数以及传入的参数
第五行,定义了回收内容的变量
第六行,用换行符把内容分割成列表
第七行,对列表内所有的行进行遍历
第八行,对列表中的内容进行空格删除,然后看看是不是为空,用这样的方式判断行内是否有内容。
第九行,对有内容的行进行回收。
第十行,返回结果
于是我们得到了完整的程序,如下图
运行后的效果如下图
于是我们看到,所有的空行没有了。剩下的行都是有内容的行。
我平时的工作中,偶尔会用 Java 做一些解析HTML的工作。有的时候我需要删除所有的HTML标签,只保留纯文字内容。这个问题在做过一些爬虫工作的朋友来说很简单。下面来说说,我们平时使用到的集中解析的方法。
通过爬虫爬到的HTML内容,从程序角度来讲,就是一个字符串。我们可以对其按照纯文本处理的方式来处理。
我们在做文本处理的时候,第一个想到的就是正则表达式。从一个字符串中删除HTML,对于正则来说,还是比较简单的。毕竟还是有固定的格式,比如“<...>”。
我们常用的的正则就是 <[^>]> 或者 <.*?> 。
我们在使用正则的时候,需要注意的是正则默认是贪婪匹配。也就是说,正则表达式<.*> 能够匹配到更多的HTML内容,而不是单个标签。
现在,让我们测试一下它是否能从HTML源中删除标签。
在我们测试删除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的空白处。我们在处理提取的文本时,可以很容易地删除或跳过这些空行或空白处。
我们刚才已经看到了,通过使用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 是一个流行的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 也是一个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的方法,我们需要注意的是,正则在文本处理的过程中并不是万能的。
站建设过程中空格字符是网页中最常见的垃圾代码。但此处讨论的空格字符并非HTML语言中的“ ;”标签,而是指代码编辑环境下敲击键盘上的空格键
所产生的符号。网页中的每个空格都相当于一个字符,因此空格字符也会占很大的空间。初步统计,空格字符约占页面总面积的1.5%。也可以说,一个100KB的页面中,其中有1.5KB是空格字符。
空格字符通常会出现在每行代码的开始和结束处,还有就是空行中。常见的有:
1、每行**始前的空格字符:是网页制作软件生成代码时,默认产生的缩进字符;
2、空白行:在编写代码时利用空行或者注释对不同功能模块进行分割,这样就产生了空白行;
3、每行代码结束处的的空格字符:是在编写HTML代码时,不小心加上的。只要在每行代码的结束位置向右移动光标,如果光标不换行,则说明该行后面还存在空格字符。
成都网站建设浅谈几种常见的清理方法:
1、每行**始前的空格字符
可以使用Dreamweaver或者EditPlus等软件进行清理:
a:转至HTML代码编辑模式(如果是Dreamweaver);
b:按Ctrl+A选择全部代码;
c:使用组合键Shift+Tab,直至删除完所有空格为止。
2、空白行
只能手工逐行清理掉:
a:首先,使用鼠标选择空行;
b:再按Delete键,即可删除空行。
3、每行代码结束处的的空格字符
可以使用Dreamweaver或者其他编辑软件的替换功能进行清理:
a:用鼠标选择“>”+“一个空格字符”,即“>”;
b:再按CTRL+F
C:“替换”处填上“>”,再点击“替换全部”即可。
成都网站建设实践发现,页面经过清理空格字符,大概可以删除70%左右的垃圾代码。也就是说,空格字符的代码量大概占垃圾代码的70%。
成都蜀风科技打造与企业品牌相匹配的网站及微信开发,对每一个网站建设和微信开发项目,都以策略先行,再将创意与技术完美结合。为企业打造出与企业品牌气质相匹配的网络品牌形象。我们始终保持行业领先开发水平,不断掌握领先的网络技术。
*请认真填写需求信息,我们会在24小时内与您取得联系。