对于一段HTML文本,需要去掉文本内所有HTML标签,只保留纯文本内容,可以怎么实现?看到很多写正则表达式,用StringUtils里的replace方法实现的。我自己也尝试了一下,发现正则匹配的结果并不是完全可靠的。由此,本篇博客将介绍一个Java库,可以实现对HTML文本的各种操作,简单好用。
jsoup是一款Java的HTML解析器,可以直接解析某个URL地址或HTML内容。它提供了一套非常简单好用的API,可通过DOM,CSS以及类似于jQuery的操作方法来读取和操作数据。
jsoup是一个根据自由MIT许可证分发的开源项目,源代码可在GitHub获得。
1. org.jsoup.Jsoup类
Jsoup类是任何Jsoup程序的入口点,并将提供从各种来源加载和解析HTML文档的方法。核心方法如下:
2. org.jsoup.nodes.Document类
该类表示通过Jsoup库加载HTML文档。可以使用此类执行适用于整个HTML文档的操作。下面列举一些核心方法:
3. org.jsoup.nodes.Element类
HTML元素是由标签名称,属性和子节点组成。 使用Element类,可以帮助我们提取数据,遍历节点和操作HTML。
1. Maven依赖
使用jsoup,只需要引入一个依赖即可
<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version>
</dependency>
2. 使用示例
//1.从URL地址加载html
//方法一:connection连接URL
Document doc = Jsoup.connect("https://www.baidu.com/").get();
//方法二:parse解析URL
Document document = Jsoup.parse(new URL("https://www.baidu.com/"), 30000);
//2.加载html文件
Document document = Jsoup.parse( new File( "D:/temp/index.html" ) , "utf-8" );
//3. 直接解析html文本
String html = "解析HTML "
+ "解析方法.
";
Document document = Jsoup.parse(html);
//1. clean方法
String content = Jsoup.clean("\n" +
" 百科\n" +
" ", Whitelist.none());
log.info("clean结果:" + content);
//2. parse方法后通过text获取内容
String text = Jsoup.parse("\n" +
" 百科\n" +
" ").text();
log.info("parse-text结果:" + text);
//以上结果都是“百科”
Document doc = Jsoup.connect("https://v2.cn.vuejs.org/v2/guide/").get();
//1. 获取title
System.out.println("title结果:" + doc.title());
//结果:介绍 — Vue.js
//2. 获取body
System.out.println("body结果:" + doc.body());
//结果:内的所有内容
//3. 添加一个元素
Element element = doc.createElement("@@@");
//结果:<@@@>@@@>
//4. 复制doc
Document clone = doc.clone();
//结果:整个html文档拷贝
Document doc = Jsoup.connect("https://v2.cn.vuejs.org/v2/guide/").get();
//1. 根据id获取元素
System.out.println("根据id获取元素结果:" + doc.getElementById("search-query-nav"));
//结果:
//2. 根据class获取元素
System.out.println("根据class获取元素结果:" + doc.getElementsByClass("nav-link"));
//结果:学习
//教程...
//3. 根据tag获取元素
System.out.println("根据tag获取元素结果:" + doc.getElementsByTag("img"));
//结果:
//
//...
Document doc = Jsoup.connect("https://v2.cn.vuejs.org/v2/guide/").get();
//1. 带有href属性的a元素
Elements links = doc.select("a[href]");
System.out.println("带href属性的a元素结果:" + links);
//结果:
//在这里...
//2. 扩展名为.png的图片
Elements png = doc.select("img[src$=.png]");
System.out.println("扩展名为.png图片的结果:" + png);
//结果:
这个工具,让服务端也能很容易地处理HTML文本了。除了自己用到的一些方法,通过本篇博客的总结,也发现了其更多方法,以后查API文档应该就足够用了。