Jsoup
Jsoup
是一款轻量高效的 html 文档解析工具,可类比 xml 中的dom4j
、jdom
Jsoup中的基本类
- <b>Document</b>
Html 整个文档在内容中的数据结构,继承 Element
- <b>Element</b>
标记元素的数据结构 ,继承 Node
- <b>Elements</b>
Element 的集合,继承 ArrayList<Element>
- <b>Node</b>
节点,是 Element,Document 的超类,定义了节点的基本方法
类 Jsoup 解析 HTML 文档的静态方法
<b>jsoup 对于获取 html 元素有三种方式:</b>
- 传统的基于元素 ID,CLASS,TAGNAME 获取匹配元素的方法;接口
doc.getElementByXXX()
- 基于 css selector 的元素定位获取方法;接口
doc.select(cssQueryString)
- 基于元素间的父子兄弟姊妹关系获取;
e.parent()
,e.children()
,e.child(int index)
,e.siblingElements()
,e.firstElementSibling()
,lastElementSibling()
,nextElementSibling()
,previousElementSibling()
类Selector 的定位查询 HTML 元素方法
<b>html 中 selector == xml 中 xpath == database 中 select sql</b>
- 一个小栗子
@Test
public void test() throws IOException {
File f = new File("resource/test.html");
Document doc = Jsoup.parse(f,"utf-8");
//JavaScript 链接
Elements sLinks = doc.select("script[src]");
for(Element e : sLinks){
System.out.println("javascript link: "+e.attr("src"));
}
hr();
//javaScript 内容
Elements sData = doc.select("script");
for(Element e : sData){
String data = e.data();
if(data != null && data.trim().length() > 0){
System.out.println("javascript data: "+data);
}
}
hr();
//css 链接
Elements cLinks = doc.select("link[rel='stylesheet']");
for(Element e : cLinks){
System.out.println("css link: "+e.attr("href"));
}
hr();
//css 内容
Elements cData = doc.select("style");
for(Element e : cData){
String data = e.data();
if(data != null && data.trim().length() > 0){
System.out.println("css data:"+data);
}
}
hr();
//body 下 javascript 内容
Elements bContent = doc.select("body");
for(Element e : bContent){
System.out.println("body javascript data: "+e.data());
}
hr();
//body 下 所有文本内容(包含子孙标记的文本内容)
System.out.println("body text: "+bContent.get(0).text());
hr();
//<a>标记的所有链接地址
Elements aHref = doc.select("a[href]");
for(Element e : aHref){
System.out.println("a href: "+e.attr("href"));
}
hr();
//<a>标记的以http协议的地址
Elements aHttp = doc.select("a[href^=http]");
for(Element e : aHttp){
System.out.println("a http href : "+e.attr("abs:href"));
}
hr();
}
public static void hr(){
System.out.println("---------------------------------------------------------------");
}