网络爬虫——HtmlCleaner解析HTML

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 LanguageURL为://www.runoob.com/html/html-tutorial.html

标题为:【学习 HTML5】
描述为:HTML5 是下一代 HTML 标准
URL为://www.runoob.com/html/html5-intro.html

标题为:【学习 CSS】
描述为:层叠样式表(Cascading StyleSheetURL为://www.runoob.com/css/css-tutorial.html

标题为:【学习 CSS3】
描述为:CSS3CSS技术的升级版本
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值