概念
Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
快速入门
步骤
导入jar包
jsoup-1.11.2.jar
获取Document
获取对应的标签Element对象
获取数据
1 2 3 4 5 6 7 8 9 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
| package com.xml.jsoup;
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;
import java.io.File;
public class JsoupDemo1 { public static void main(String[] args) throws Exception { String path = JsoupDemo1.class.getResource("student.xml").getPath(); Document document = Jsoup.parse(new File(path), "utf-8"); Elements elements = document.getElementsByTag("name"); System.out.println(elements.size());
Element element = elements.get(0);
String name = element.text(); System.out.println(name);
} }
|
对象的使用
- Jsoup:工具类,可以解析html或者xml文档返回给Document对象。
- Document:文档对象,代表内存中的dom树
- Elements:元素Element对象的集合。可以当作ArrayList来使用
- Element:元素对象
- Node:节点对象
Jsoup对象
- parse:解析html或者xml文档,返回Document
- parse(File in,String charsetName) :解析html或者xml文件的
- parse(String html):解析xml或者html字符串的
- parse(URL url ,int timeoutMillis):通过网络路径获取指定的HTML和xml的文档对象
1 2 3 4 5 6 7 8 9 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 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| package com.xml.jsoup;
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;
import java.io.File; import java.net.URL;
public class JsoupDemo2 { public static void main(String[] args) throws Exception { String path = JsoupDemo2.class.getResource("student.xml").getPath();
String str = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + " <students xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + " \t\t\t xmlns=\"http://www.itcast.cn/xml\" \n" + " \t\t xsi:schemaLocation=\"http://www.itcast.cn/xml student.xsd\"\n" + " \t\t >\n" + " \t<student number=\"xml_0001\">\n" + " \t\t<name>tom</name>\n" + " \t\t<age>18</age>\n" + " \t\t<sex>male</sex>\n" + " \t</student>\n" + "\t<student number=\"xml_0002\">\n" + " \t\t<name>mark</name>\n" + " \t\t<age>18</age>\n" + " \t\t<sex>female</sex>\n" + " \t</student>\n" + "\t\t \n" + " </students>"; Document document = Jsoup.parse(str); System.out.println(document);
URL url = new URL("http://oldaz.top/"); Document document1 = Jsoup.parse(url, 10000); System.out.println(document1); } }
|
Document对象
文本对象,代表内存中的dom树
功能:获取Element对象
getElementById(id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称来获取元素元素对象集合
getElementsByAttribute(String key,String value):
根据对应的属性名和属性值获取元素对象集合。
案例代码
xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?xml version="1.0" encoding="UTF-8" ?> <students> <student number="xml_0001"> <name id ="id01">tom</name> <age>18</age> <sex>male</sex> </student> <student number="xml_0002"> <name>mark</name> <age>18</age> <sex>female</sex> </student> </students>
|
获取Elements对象
1 2 3 4 5 6 7 8 9 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 38 39
| package com.xml.jsoup;
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.File;
public class JsoupDemo3 { public static void main(String[] args) throws Exception { String path = JsoupDemo2.class.getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
Elements elements = document.getElementsByTag("student"); System.out.println(elements);
System.out.println("----------getEleentsById-----------");
Elements elements1 = document.getElementsByAttribute("id"); System.out.println(elements1); System.out.println("--------------------"); Elements elements2 = document.getElementsByAttributeValue("number", "xml_0001"); System.out.println(elements2); System.out.println("--------------------"); Element id01 = document.getElementById("id01"); System.out.println(id01); } }
|
Element对象
获取子元素对象
getElementById(id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称来获取元素元素对象集合
getElementsByAttribute(String key,String value):
根据对应的属性名和属性值获取元素对象集合。
获取属性值
String attr(String key):根据属性名称获取属性值
获取文本内容
String text():获取文本内容
String html():获取标签体的所有内容(包括子标签的字符串内容)
1 2 3 4 5 6 7 8 9 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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| package com.xml.jsoup;
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;
import java.io.File;
public class JsoupDemo4 { public static void main(String[] args) throws Exception { String path = JsoupDemo2.class.getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
Elements elements = document.getElementsByTag("name"); System.out.println(elements.size());
System.out.println("---------------"); Element student_1 = document.getElementsByTag("student").get(0); Elements stdent_1_name = student_1.getElementsByTag("name"); System.out.println(stdent_1_name.size()); String number = student_1.attr("number"); System.out.println(number);
String text = stdent_1_name.text(); String html = stdent_1_name.html(); System.out.println(text); System.out.println(html);
} }
|
Node节点对象
是Document和Element的父类
主要是包含增删改的方法