# java Jsoup XPath 提取模块详细解释
## 什么是 Jsoup?
Jsoup 是一个 Java 的 HTML 解析器,可以从一个 URL、文件或字符串中解析 HTML。它提供了类似 jQuery 的选择器语法,可以很方便地提取和操作网页中的 HTML 元素。
## XPath 与 Jsoup
虽然 Jsoup 支持 CSS 选择器语法,但是它并不直接支持 XPath 查询。然而,你可以通过 Jsoup 提供的选择器和方法来模拟 XPath 的一些功能,常见的选择器有:`select()`, `get()`, `text()`, `attr()` 等。
## 1. 初始化 Jsoup
首先,你需要引入 Jsoup 库。可以通过 Maven 或 Gradle 来集成 Jsoup。
### Maven:
```xml
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.2</version>
</dependency>
Gradle:
implementation 'org.jsoup:jsoup:1.15.2'
示例:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupExample {
public static void main(String[] args) throws Exception {
String url = "https://example.com";
Document document = Jsoup.connect(url).get();
// 获取页面标题
String title = document.title();
System.out.println("Title: " + title);
}
}
2. Jsoup 提取方法
2.1 select()
select() 方法用来通过 CSS 选择器提取元素,类似于 XPath 中的路径查询。它返回的是一个 Elements 对象,可以通过索引访问具体的元素。
示例:
Elements links = document.select("a[href]"); // 提取所有链接
for (Element link : links) {
System.out.println(link.attr("href"));
}
选择器支持:
*选择所有元素.className选择指定类名的元素#id选择指定 ID 的元素element > child选择直接子元素element child选择所有子元素element + sibling选择紧邻的兄弟元素element ~ sibling选择之后所有兄弟元素
2.2 text()
text() 用来提取文本内容,相当于 XPath 中的 text() 函数。
示例:
String text = document.select("p").text(); // 获取所有 <p> 标签的文本
System.out.println(text);
2.3 attr()
attr() 用来提取指定属性的值。相当于 XPath 中的 @attribute。
示例:
String href = document.select("a").attr("href"); // 提取 <a> 标签的 href 属性
System.out.println(href);
2.4 get()
get() 方法获取单个元素,通常用于根据 CSS 选择器提取一个元素。
示例:
Element link = document.select("a[href]").get(0); // 获取第一个 <a> 标签
System.out.println(link.attr("href"));
2.5 first() 与 last()
这两个方法可以用来获取符合条件的第一个或最后一个元素。
示例:
Element firstLink = document.select("a[href]").first(); // 获取第一个链接
System.out.println(firstLink.attr("href"));
2.6 size()
size() 返回符合条件的元素数量,相当于 XPath 中的 count()。
示例:
int numLinks = document.select("a[href]").size(); // 获取所有链接的数量
System.out.println(numLinks);
2.7 parents() 与 children()
parents() 获取元素的所有父元素,children() 获取元素的所有子元素。
示例:
Elements parents = document.select("a").parents();
for (Element parent : parents) {
System.out.println(parent.tagName());
}
2.8 siblings()
siblings() 获取元素的所有兄弟元素。
示例:
Elements siblings = document.select("a").siblings();
for (Element sibling : siblings) {
System.out.println(sibling.tagName());
}
3. 其他常用方法
3.1 html()
html() 获取或设置元素的 HTML 内容。
示例:
String htmlContent = document.select("div.content").html(); // 获取内容
System.out.println(htmlContent);
3.2 val()
val() 获取或设置输入元素的值。
示例:
String inputValue = document.select("input[name='username']").val(); // 获取输入框的值
System.out.println(inputValue);
3.3 hasClass()
hasClass() 判断元素是否具有指定的类。
示例:
boolean hasClass = document.select("div").hasClass("active");
System.out.println(hasClass);
4. 模拟 XPath 操作
虽然 Jsoup 不直接支持 XPath,但是可以通过 CSS 选择器的组合来实现类似 XPath 的查询。例如:
- XPath
//a[@href='example.com']可以用select("a[href='example.com']")实现。 - XPath
/html/body/div可以用select("body > div")实现。
5. 总结
select():通过 CSS 选择器来提取元素,灵活且强大。text():提取文本内容。attr():提取元素的属性值。first()与last():提取第一个或最后一个元素。html():获取或设置元素的 HTML 内容。
Jsoup 提供了一种简洁且高效的方式来解析和操作 HTML 内容,并且能够用类似 XPath 的方法进行元素提取。
853

被折叠的 条评论
为什么被折叠?



