1、简介
HtmlCleaner 是另外一款基于 Java 开发的 HTML 文档解析器,支持 XPath 语法提取 HTML 中的节点或元素。
2、Jar包下载
<dependency>
<groupId>net.sourceforge.htmlcleaner</groupId>
<artifactId>htmlcleaner</artifactId>
<version>2.22</version>
</dependency>
3、HtmlCleaner 类与 TagNode 类
使用 HtmlCleaner 解析 HTML 文档时,需要使用到两个类:org.htmlcleaner.HtmlCleaner 以及 org.htmlcleaner.TagNode。HtmlCleaner 类提供了实例化 HtmlCleaner 的方法和将 指定类型输入(如 String 类型的 HTML 字符串、String 类型的 URL 等)转化成节点 (TagNode)的方法,表列举了 HtmlCleaner 类中的部分方法和说明。
方法 | 说明 |
---|---|
TagNode clean(String htmlContent) | 将 String 类型的 HTML 转化成 TagNode |
TagNode clean(File file, String charset) | 按照指定字符集将 File 中存储的 HTML 转化成 TagNode |
TagNode clean(File file) | 按照默认字符集将 File 中存储的 HTML 转化成 TagNode |
TagNode clean(URL url, String charset) | 获取 URL 对应的 HTML 内容(指定字符集),并将其转化成 TagNode |
TagNode clean(URL url) | 获取 URL 对应的 HTML 内容(默认字符集),并将其转化成 TagNode |
TagNode clean(InputStream in, String charset) | 按照指定字符集将输入流中的 HTML 内容转化成 TagNode |
TagNode clean(InputStream in) | 按照默认字符集将输入流中的 HTML 内容转化成 TagNode |
TagNode 类提供了一系列操作节点的方法,如表所示。
方法 | 说明 |
---|---|
Object[] evaluateXPath(String xPath) | 基于 Xpath 语法获取 Object 数组 |
String getAttributeByName(String attName) | 基于属性名称获取属性值 |
TagNode findElementByName(String findName, boolean isRecursive) | 基于标签名获取节点 |
CharSequence getText() | 获取节点中的文本 |
TagNode getParent() | 获取父节点 |
List getChildTagList() | 获取所有子节点,返回值为集合 |
boolean hasChildren() | 判断是否存在子节点 |
4、案例
下面用 HtmlCleaner 解析 菜鸟教程 页面中的数据,如图所示。解析的内容 包括课程表名称、课程表 URL、大标题和每个课程表的文本描述信息,解析过程如 程序所示。
首先,使用 Jsoup 获取 String 类型 URL 对应的 HTML 内容。然后,实例化HtmlCleaner,并基于 HtmlCleaner 类中的 clean(String htmlContent)方法将 String 类型 的 HTML 转化成 TagNode。之后,采用 evaluateXPath(String xPath)方法操作 TagNode 得到 Object 数组,通过对该数组的操作便能够获得具体的字段值。
public class HtmlcleanerTest1 {
public static void main(String[] args) throws IOException, XPatherException {
//使用Jsoup获取HTML文件
Document document = Jsoup.connect("https://www.runoob.com")
.timeout(5000).get();
//转换成String格式
String html = document.html();
//实例化HtmlCleaner
HtmlCleaner cleaner = new HtmlCleaner();
//转化成TagNode
TagNode node = cleaner.clean(html);
//通过Xpath定位标题的位置
Object[] ns = node.evaluateXPath("//div[1]/a");
for (Object o : ns) {
TagNode tagNode = (TagNode)o;
TagNode h4 = (TagNode) tagNode.evaluateXPath("./h4")[0];
TagNode strong = (TagNode) tagNode.evaluateXPath("./strong")[0];
String title = h4.getText().toString();
String describe = strong.getText().toString();
String url = tagNode.getAttributeByName("href");
System.out.println("标题为:" + title);
System.out.println("描述为:" + describe);
System.out.println("URL为:" + url);
System.out.println();
}
}
}
标题为:【学习 HTML】
描述为:HTML,即超文本标记语言(Hyper Text Markup Language)
URL为://www.runoob.com/html/html-tutorial.html
标题为:【学习 HTML5】
描述为:HTML5 是下一代 HTML 标准
URL为://www.runoob.com/html/html5-intro.html
标题为:【学习 CSS】
描述为:层叠样式表(Cascading StyleSheet)
URL为://www.runoob.com/css/css-tutorial.html
标题为:【学习 CSS3】
描述为:CSS3是CSS技术的升级版本
URL为://www.runoob.com/css3/css3-tutorial.html
标题为:【学习 Bootstrap3】
描述为:Bootstrap,来自 Twitter,是目前最受欢迎的前端框架
URL为://www.runoob.com/bootstrap/bootstrap-tutorial.html
标题为:【学习 Bootstrap4】
描述为:Bootstrap4 前端框架
URL为://www.runoob.com/bootstrap4/bootstrap4-tutorial.html
标题为:【学习 Bootstrap5】
描述为:Bootstrap5 目前是 Bootstrap 的最新版本
URL为://www.runoob.com/bootstrap5/bootstrap5-tutorial.html
标题为:【学习 Font Awesome】
描述为:Font Awesome 是一套绝佳的图标字体库和CSS框架。
URL为://www.runoob.com/font-awesome/fontawesome-tutorial.html
标题为:【学习 Foundation】
描述为:Foundation 用于开发响应式的 HTML, CSS and JavaScript 框架
URL为://www.runoob.com/foundation/foundation-tutorial.html