文章目錄
- Jsoup簡介
- 依賴
- 解析URL
- 解析字元串
- 解析檔案
- 使用Dom擷取元素
-
- 1. 根據id擷取元素
- 2. 根據标簽擷取元素
- 3. 根據class擷取元素
- 4. 根據屬性擷取元素
- 從元素中擷取資料
- 使用選擇器擷取元素
-
- 選擇器的組合使用
Jsoup簡介
Jsoup是一款Java的HTML解析器,可以直接解析某個URL位址,HTML文本内容.它提供了一套非常省力的API,通過可以DOM,CSS以及類似于jQuery的操作方法取出和操作資料.
依賴
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
<!--操作檔案的工具類-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!--字元串處理工具-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<!--測試用例-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
解析URL
根據url下載下傳資料,然後對下載下傳的資料進行解析
@Test
public void testUrl() throws Exception {
// 解析url
// 第一個參數為通路的url,第二個參數為通路的逾時時間
Document doc = Jsoup.parse(new URL("http://www.baidu.com"), 1000);
//使用标簽選擇器擷取title中的内容
String title = doc.getElementsByTag("title").first().text();
System.out.println(title);
}
解析字元串
@Test
public void testString() throws Exception {
//使用工具類讀取檔案,擷取字元串
String content = FileUtils.readFileToString(new File("C:\\Users\\yubin14\\Desktop\\new.html"), "utf8");
//使用Jsoup解析字元串
Document doc = Jsoup.parse(content);
String title = doc.getElementsByTag("title").first().text();
System.out.println(title);
}
解析檔案
@Test
public void testFile() throws Exception {
//解析檔案
Document doc = Jsoup.parse(new File("C:\\Users\\yubin14\\Desktop\\new.html"), "utf8");
String title = doc.getElementsByTag("title").first().text();
System.out.println(title);
}
使用Dom擷取元素
1. 根據id擷取元素
//1. 根據id擷取元素
Element element = doc.getElementById("people");
//列印标簽中的文本
System.out.println(element.text());
2. 根據标簽擷取元素
//2. 根據标簽擷取元素
Element element = doc.getElementsByTag("span").first();
System.out.println(element.text());
3. 根據class擷取元素
//3. 根據class擷取元素
Element element = doc.getElementsByClass("lione").first();
System.out.println(element.text());
4. 根據屬性擷取元素
//4. 根據屬性擷取元素
Element element1 = doc.getElementsByAttribute("abc").first();
//根據屬性名和屬性值擷取元素
Element element2 = doc.getElementsByAttributeValue("abc", "123").first();
System.out.println(element1.text());
從元素中擷取資料
@Test
public void testData() throws Exception {
Document doc = Jsoup.parse(new File("C:\\Users\\yubin14\\Desktop\\new.html"), "utf8");
Element element = doc.getElementsByTag("img").first();
String str = "";
//從元素中擷取id
str = element.id();
//從元素中擷取className
str = element.className(); //多個類名時不拆分
Set<String> classNames = element.classNames();//多個類名時拆分
//從元素中根據屬性名擷取屬性值
str = element.attr("src");
//從元素中擷取所有屬性
Attributes attributes = element.attributes();
System.out.println(attributes);
//從元素中擷取文本内容
str = element.text();
System.out.println(str);
}
使用選擇器擷取元素
@Test
public void testSelector() throws Exception {
Document doc = Jsoup.parse(new File("C:\\Users\\yubin14\\Desktop\\new.html"), "utf8");
//通過标簽查找元素
Elements elements = doc.select("span");
// for (Element element : elements) {
// System.out.println(element.text());
// }
//通過id查找元素
Element element = doc.select("#people").first();
System.out.println(element.text());
//通過class擷取元素
Element element1 = doc.select(".lione").first();
System.out.println(element1.text());
//通過屬性擷取元素
Element element2 = doc.select("[abc]").first();
System.out.println(element2.text());
//通過屬性名和屬性值查找元素
Elements elements1 = doc.select("[abc=123]");
for (Element element3 : elements1) {
System.out.println(element3.text());
}
}
選擇器的組合使用
@Test
public void testSelector2() throws Exception {
Document doc = Jsoup.parse(new File("C:\\Users\\yubin14\\Desktop\\new.html"), "utf8");
//元素+id: el#id
Elements select = doc.select("div#a");
System.out.println(select.text());
//元素+class: el.class
Element element = doc.select("li.news-meta-item").first();
System.out.println(element.text());
//元素+屬性名:el[attr]
Element first = doc.select("li[abc]").first();
System.out.println(first.text());
//查找某元素下面的子元素 parent child
Elements elements = doc.select(".s-rank-title div");
for (Element element1 : elements) {
System.out.println(element1.text());
}
//查找某元素的直接子元素 parent > child
Elements elements1 = doc.select("c > a");
for (Element element1 : elements1) {
System.out.println(element1.text());
}
//查找某元素的所有直接子元素 parent > *
Elements select1 = doc.select("parent > *");
for (Element element1 : select1) {
System.out.println(element1.text());
}
}
元素,id,class,屬性名的組合是任意的,可以有兩個,也可以有多個