JavaHTML解析器之Jsoup解析获取Document对象的方式
优采云 发布时间: 2021-05-16 21:27JavaHTML解析器之Jsoup解析获取Document对象的方式
Jsoup简介
jsoup是一个Java HTML解析器,可以直接解析URL地址和HTML文本内容。它提供了非常省力的API,可以通过DOM,CSS和类似于jQuery的操作方法来检索和处理数据。
Jsoup.jpg
官方网址:
官方网站还为开发人员提供了一套说明(Cookbook)。
Jsoup解析HTML以获取Document对象,并通过操纵Document的属性来获取HTML页面的内容。因此,在开始之前,我们先介绍一下Node,Element,Document和其他XML相关概念之间的区别,以防止该概念引起混淆。导致滥用和滥用。
相关概念
public abstract class Node implements Cloneable
public class Element extends Node
public class Document extends Element
从Jsoup源代码中的三个定义,我们可以看到以下树继承关系:
节点,元素,文档继承关系.png
节点(节点)
从上面的继承关系中可以明显看出,文档中的所有内容都可以视为一个节点。节点的类型很多:属性节点(Attribute),注释节点(Note),文本节点(Text),元素节点(Element)等。通常,节点是这些各种节点的统称。
元素(元素)
与节点相比,元素的定义较窄。元素是从节点继承的,并且是节点的子集,因此元素也是节点,并且该节点的公共属性和方法也可以在该元素中使用。
文档(文档)
文档继承自元素,该元素引用整个HTML文档的源内容。可以通过System.out.println(document.toString());在控制台上打印网页的源内容。
相互转换
基于节点,元素和文档之间的“缠结”关系,每个类中提供的方法可用于适当地转换和获取所需的使用对象。
用例
Jsoup解析Html以获取Document对象的方式分为三类:联机Url,Html文本字符串和文件。相应的API如下
获取Document对象后,可以组合HTML源代码,并使用Jsoup提供的API通过类,标签,id,属性和其他相关属性获取相应的Element,然后获取所需的网页内容。
以下以Jsoup官方网站的Cookbook页面为例,解析并获取页面目录的内容。
网页内容:
Jsoup Cookbook webpage.jpg
网页源代码:
jsoup开发指南,jsoup中文使用手册,jsoup中文文档
jsoup » cookbook
jsoup Cookbook(中文版)
入门
输入
数据抽取
数据修改
html清理
jsoup html parser: copyright © 2009 - 2011 jonathan hedley
Jsoup分析:
import java.io.IOException;
import java.text.ParseException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
/**
* @author 亦枫
* @created_time 2016年1月5日
* @file_user_todo Java测试类
* @blog http://www.jianshu.com/users/1c40186e3248/latest_articles
*/
public class JavaTest {
/**
* 入口函数
* @param args
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
try {
//解析Url获取Document对象
Document document = Jsoup.connect("http://www.open-open.com/jsoup/").get();
//获取网页源码文本内容
System.out.println(document.toString());
//获取指定class的内容指定tag的元素
Elements liElements = document.getElementsByClass("content").get(0).getElementsByTag("li");
for (int i = 0; i < liElements.size(); i++) {
System.out.println(i + ". " + liElements.get(i).text());
}
} catch (IOException e) {
System.out.println("解析出错!");
e.printStackTrace();
}
}
}
分析结果: