jsoup是一款Java的HTML解析器,主要用来对HTML解析.在爬虫的时候,当我们用HttpClient之类的框架,获取到网页源码之后,需要从网页源码中取出我们想要的内容,就可以使用jsoup这类HTML解析器了,可以非常轻松的实现.虽然jsoup也支持从某个地址直接去爬取网页源码,但是只支持HTTP,HTTPS协议,支持不够丰富.所以,主要还是用来对HTML进行解析.其中,要被解析的HTML可以是一个HTML的字符串,可以是一个URL,可以是一个文件.
一 快速入门
1. 导入jar包
2. 获取Document对象
3. 获取对应的标签Element对象
4. 获取数据
01
02
03
04
05
06
07
08
09
10
11
12
|
//2.1获取student.xml的path
String path = JsoupDemo1.
class
.getClassLoader().getResource(
"student.xml"
).getPath();
//2.2解析xml文档,加载文档进内存,获取dom树--->Document
Document document = Jsoup.parse(
new
File(path),
"utf-8"
);
//3.获取元素对象 Element
Elements elements = document.getElementsByTag(
"name"
);
System.out.println(elements.size());
//3.1获取第一个name的Element对象
Element element = elements.get(
0
);
//3.2获取数据
String name = element.text();
System.out.println(name);
|
二 类的说明
1. Jsoup:工具类,可以解析html或xml文档,返回Document
* parse:解析html或xml文档,返回Document
* parse(File in, String charsetName):解析xml或html文件的。
* parse(String html):解析xml或html字符串
* parse(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
2. Document:文档对象。代表内存中的dom树
* 获取Element对象
* getElementById(String id):根据id属性值获取唯一的element对象
* getElementsByTag(String tagName):根据标签名称获取元素对象集合
* getElementsByAttribute(String key):根据属性名称获取元素对象集合
* getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
3. Elements:元素Element对象的集合。可以当做 ArrayList<Element>来使用
4. Element:元素对象
1. 获取子元素对象
* getElementById(String id):根据id属性值获取唯一的element对象
* getElementsByTag(String tagName):根据标签名称获取元素对象集合
* getElementsByAttribute(String key):根据属性名称获取元素对象集合
* getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
2. 获取属性值
* String attr(String key):根据属性名称获取属性值
3. 获取文本内容
* String text():获取文本内容
* String html():获取标签体的所有内容(包括字标签的字符串内容)
5. Node:节点对象
* 是Document和Element的父类
三 快捷查询方式
1. selector:选择器
* 使用的方法:Elements select?(String cssQuery)
* 语法:参考Selector类中定义的语法
2. XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
* 使用Jsoup的Xpath需要额外导入jar包。
* 查询w3cshool参考手册,使用xpath的语法完成查询
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
//1.获取student.xml的path
String path = JsoupDemo6.
class
.getClassLoader().getResource(
"student.xml"
).getPath();
//2.获取Document对象
Document document = Jsoup.parse(
new
File(path),
"utf-8"
);
//3.根据document对象,创建JXDocument对象
JXDocument jxDocument =
new
JXDocument(document);
//4.结合xpath语法查询
//4.1查询所有student标签
List<JXNode> jxNodes = jxDocument.selN(
"//student"
);
for
(JXNode jxNode : jxNodes) {
System.out.println(jxNode);
}
System.out.println(
"--------------------"
);
//4.2查询所有student标签下的name标签
List<JXNode> jxNodes2 = jxDocument.selN(
"//student/name"
);
for
(JXNode jxNode : jxNodes2) {
System.out.println(jxNode);
}
System.out.println(
"--------------------"
);
//4.3查询student标签下带有id属性的name标签
List<JXNode> jxNodes3 = jxDocument.selN(
"//student/name[@id]"
);
for
(JXNode jxNode : jxNodes3) {
System.out.println(jxNode);
}
System.out.println(
"--------------------"
);
//4.4查询student标签下带有id属性的name标签 并且id属性值为itcast
List<JXNode> jxNodes4 = jxDocument.selN(
"//student/name[@id='itcast']"
);
for
(JXNode jxNode : jxNodes4) {
System.out.println(jxNode);
}
|