一、Jsoup的基本介绍
Jsoup 是一款流行的 Java 库,用于解析、操作和输出 HTML。它提供了非常便捷的 API 来处理 HTML 文档,类似于 jQuery 对于 JavaScript 的作用。Jsoup 能够从 URL、文件或字符串中加载 HTML,并使用 DOM(文档对象模型)方法或 CSS 选择器来查询和操作数据。
二、Jsoup的项目特点
1、灵活的解析:Jsoup 可以解析任意的无序、无效或不规范的 HTML。
2、强大的选择器:支持 CSS 选择器来查找文档中的元素。
3、修改和输出:可以轻松修改 HTML 文档,并以干净的格式输出。
4、安全:自动处理相对和绝对 URL,防止安全问题如 XSS(跨站脚本攻击)。
5、扩展性:支持插件和扩展,可以自定义解析和输出行为。
三、Jsoup的使用方法
要在项目中使用 Jsoup,首先需要添加 Maven 依赖:
请确保使用最新版本的 Jsoup。
核心功能
以下是 Jsoup 的一些核心功能和用法示例:
1. 解析 HTML
从 URL、文件或字符串中解析 HTML:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class JsoupExample {
public static void main(String[] args) {
String html = "
+ "
Parsed HTML into a doc.
";Document doc = Jsoup.parse(html);
Element title = doc.select("title").first();
System.out.println(title.text());
}
}
这个例子展示了如何解析一个 HTML 字符串并获取标题标签的文本。
2. 从 URL 加载和解析
从互联网上的 URL 加载 HTML:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupUrlExample {
public static void main(String[] args) throws Exception {
String url = "http://example.com";
Document doc = Jsoup.connect(url).get();
System.out.println(doc.title());
}
}
这个例子展示了如何从 URL 加载 HTML 并获取页面标题。
3. 使用 CSS 选择器
使用 CSS 选择器来查找元素:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class JsoupCssSelectorExample {
public static void main(String[] args) {
String html = "
Example
Paragraph
Document doc = Jsoup.parse(html);
Elements paragraphs = doc.select("p");
for (org.jsoup.nodes.Element paragraph : paragraphs) {
System.out.println(paragraph.text());
}
}
}
这个例子展示了如何使用 CSS 选择器来选择所有的
标签并打印它们的文本。
4. 修改 HTML
修改 HTML 文档并输出:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class JsoupModifyExample {
public static void main(String[] args) {
String html = "
+ "
Parsed HTML into a doc.
";Document doc = Jsoup.parse(html);
Element title = doc.select("title").first();
title.text("New Title"); // 修改标题
System.out.println(doc.toString());
}
}
四、Jsoup的高级用法
1. 从HTML中提取图片
你可以使用 Jsoup 提取 HTML 文档中的所有图片。以下是一个示例代码:
Document doc = Jsoup.connect(url).get();
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
这里的正则表达式可以过滤掉非图片类型的元素。
2. 从HTML中提取所有链接
你可以使用 Jsoup 提取 HTML 中的所有链接:
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a[href]");
然后遍历 links 集合,即可获取每个链接的 href 属性和文本内容。
3. 自定义User-Agent和超时时间
你可以通过以下方式指定 Jsoup 连接的 User-Agent 和超时时间:
Document doc = Jsoup.connect("http://csdn.com")
.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36")
.timeout(10000) // 设置超时时间为10秒
.get();
这样可以模拟浏览器访问,有时对访问某些需要特定 User-Agent 的网站很有用。
4. 修改元素的 HTML 内容
你可以使用 Element 中的 HTML 设置方法来修改元素的内容:
Element div = doc.select("div").first();
div.html("
csdn
"); // 替换 HTML 内容div.prepend("
a
"); // 在元素前添加 HTML 内容div.append("
good
"); // 在元素后添加 HTML 内容这些方法可以非常方便地修改 HTML 文档中的元素和属性。
5. 修改元素的文本内容
对于传入的文本,如果含有像 <, > 等这样的字符,将以文本处理,而非 HTML:
Element div = doc.select("div").first();
div.text(" one "); // 替换文本内容
div.prepend(" two "); // 在元素前添加文本节点
div.append(" three "); // 在元素后添加文本节点
这将清除元素内部的 HTML 内容,然后用提供的文本代替。
6. 高级查询和修改
Jsoup 提供了非常丰富的 API 来进行高级查询和修改 HTML 文档。例如,使用 selectFirst() 选取第一个匹配元素,selectEll() 返回所有匹配元素的列表:
Element firstPara = doc.selectFirst("p");
List
在修改文档时,除了修改元素的属性外,还可以使用 replaceWith() 方法来替换指定的元素:
Element toBeReplaced = doc.selectFirst("p");
toBeReplaced.replaceWith(new Element("p").text("A new text"));
此外,可以使用 each 方法来遍历元素集合并进行批处理修改:
doc.body().getElementsByTag("a").each(a -> a.attr("rel", "nofollow"));
这段代码遍历了文档中所有的 标签,并将它们的 rel 属性设置为 nofollow。
这些高级用法展示了 Jsoup 在解析和操作 HTML 文档中的深度和灵活性。通过这些示例,你可以开始在你的 Java 项目中使用 Jsoup 来处理更复杂的 HTML 数据。