目录
- Jsoup概念
- Jsoup的基本使用
- Jsoup中的对象
- Jsoup
- Document
- Element
- Node
- Jsoup快捷查询方式
- selector
- XPath
跳转到目录
- jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。
- 导入jar包 链接:https://pan.baidu.com/s/14-Y6Satl334uw_0aEd-9qA 提取码:0uvi
- 获取Document对象
- 获取对应标签的Element对象
- 获取数据
public static void getFirstName() throws Exception{
/*
* 1. 获取Document对象
* 2. 获取student.xml的path
* 3. 解析xml文档 parse(url, charsetName)
* 4. 获取元素对象Element
* 5. 根据下标获取第一个name
* 6. 使用text()方法获取元素的内容
* */
//2.获取Document对象,根据xml文档获取
//2.1获取student.xml的path
String path = TestJsoup.class.getClassLoader().getResource("com/sunny/xml/stu.xml").getPath();
//2.2解析xml文档,加载文档进内存,获取dom树--->Document
Document document = Jsoup.parse(new File(path), "utf-8");
//3.获取元素对象 Element
Elements elements = document.getElementsByTag("name");
//3.1获取第一个name的Element对象
Element element = elements.get(1);
//3.2获取数据
String name = element.text();
System.out.println(name);
}
Jsoup中的对象
跳转到目录
- Jsoup: 工具类,可以解析html或xml文档,返回Document
- 获取Document对象
parse(File in, String charsetName)
:解析xml或html文件的。parse(String html)
:解析xml或html字符串parse(URL url, int timeoutMillis)
:通过网络路径获取指定的html或xml的文档对象
- 获取对应的标签 Element 对象
getElementById(String id)
:根据id属性值获取唯一的element对象getElementsByTag(String tagName)
:根据标签名称
获取元素对象集合getElementsByAttribute(String key)
:根据属性名称
获取元素对象集合getElementsByAttributeValue(String key, String value)
:根据对应的属性名和属性值
获取元素对象集合
- 获取属性值
String attr(String key)
:根据属性名称获取属性值
- 获取文本内容
String text()
:获取文本内容String html()
:获取标签体的所有内容(包括字标签的字符串内容)
- Node: 节点对象. 是Document和Element的父类
public class TestJsoup {
public static void main(String[] args) throws Exception{
// getFirstName();
// parseString();
// parseURL();
getElements();
}
// 获取第一个name元素的值
public static void getFirstName() throws Exception{
/*
* 1. 获取Document对象
* 2. 获取student.xml的path
* 3. 解析xml文档 parse(url, charsetName)
* 4. 获取元素对象Element
* 5. 根据下标获取第一个name
* 6. 使用text()方法获取元素的内容
* */
//2.获取Document对象,根据xml文档获取
//2.1获取student.xml的path
String path = TestJsoup.class.getClassLoader().getResource("com/sunny/xml/stu.xml").getPath();
//2.2解析xml文档,加载文档进内存,获取dom树--->Document
Document document = Jsoup.parse(new File(path), "utf-8");
//3.获取name元素对象 Element
Elements elements = document.getElementsByTag("name");
//3.1获取第一个name的Element对象
Element element = elements.get(1);
//3.2获取数据
String name = element.text();
System.out.println(name);
}
// 通过解析一个html来获取document对象
public static void parseString() throws Exception{
String str = "\n" +
" \n" +
" Tom\n" +
" 18\n" +
" male\n" +
" \n" +
" \n" +
" Lucy\n" +
" 16\n" +
" female\n" +
" \n" +
"";
Document document = Jsoup.parse(str);
System.out.println(document);
}
// 通过网络路径来解析指定的html/xml的document对象
public static void parseURL() throws Exception{
Document document = Jsoup.parse(new URL("https://www.baidu.com"), 5000);
System.out.println(document);
}
// 获取Element的常用方法
public static void getElements() throws Exception{
String path = TestJsoup.class.getClassLoader().getResource("com/sunny/xml/stu.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
// 获取属性名为id的所有元素
Element element = document.getElementsByAttribute("id").get(1);
System.out.println(element);
System.out.println("------------");
Elements element1 = document.getElementsByAttributeValue("number", "101");
System.out.println(element1);
System.out.println("-------------");
// 通过name标签名获取所有的name标签,通过get(0)获取第一个name标签,通过name标签的attr("id")属性名来获取id属性的属性值
String attr = document.getElementsByTag("name").get(0).attr("id");
System.out.println(attr);
}
}
快捷查询方式
跳转到目录
selector 选择器-
Elements
select(String cssQuery)
-
语法:
https://blog.csdn.net/syt_boss/article/details/82863990
// 使用选择器selector来快速查询需要的元素
public static void getSelector() throws Exception{
String path = TestJsoup.class.getClassLoader().getResource("com/sunny/xml/stu.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
// 根据标签名选择器来获取name元素
Elements names = document.select("name");
System.out.println(names);
System.out.println("--------------------");
// 根据id选择器来获取
Elements eles = document.select("#888");
System.out.println(eles);
System.out.println("--------------------");
// 根据类选择器来获取
Elements eles2 = document.select(".zy");
System.out.println(eles2);
System.out.println("--------------------");
// 根据属性选择器来查询
Elements eles3 = document.select("student[number=\"102\"]");
System.out.println(eles3);
System.out.println("--------------------");
// 根据后代选择器来查询
Elements eles4 = document.select("student > age");
System.out.println(eles4);
}
XPath
跳转到目录 注: 这里说的XPath为Jsoup中的XPath操作, 不同的解析器也可能支持XPath, XPath语法相同, 但是不同的解析器如何来操作XPath的语法可能不同!
- 导包(前面提供的网盘链接)
- 通过
JXDocument
对象调用selN("XPath语法")
来操作.- 通过
JXDocument jxDocument = new JXDocument(document);
来创建JXDocument对象.
- 通过
// 使用Jsoup的XPath来操作DOM树
public static void getXPath() throws Exception {
String path = TestJsoup.class.getClassLoader().getResource("com/sunny/xml/stu.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
// 根据Document创建JXDocument对象
JXDocument jxDocument = new JXDocument(document);
// 结合XPath语法查询
List jxNodes = jxDocument.selN("//name");
for (JXNode jxNode : jxNodes) {
System.out.println(jxNode);
}
System.out.println("-------------------------");
// 查询所有student标签下的name标签
List jxNodes1 = jxDocument.selN("//student/name");
for (JXNode jxNode : jxNodes1) {
System.out.println(jxNode);
}
System.out.println("-------------------------");
// 查询student标签下带有class属性的sex标签
List jxNodes2 = jxDocument.selN("//student/sex[@class]");
for (JXNode jxNode : jxNodes2) {
System.out.println(jxNode);
}
System.out.println("-------------------------");
// 查询student标签下带有class属性的sex标签,并且class属性值为gzy
List jxNodes3 = jxDocument.selN("//student/sex[@class='gzy']");
for (JXNode jxNode : jxNodes3) {
System.out.println(jxNode);
}
}
- XPath更多语法,参考 w3cshool