Jsoup 是一个开源的 Java 库,专门用于解析 HTML 文档。它提供了非常强大的功能,可以轻松地从 HTML 中提取数据、修改文档结构等。本文将详细介绍 Jsoup 的基本使用方法,帮助你快速上手。
一、Jsoup 的功能
(一)解析 HTML 文档
Jsoup 可以解析本地 HTML 文件或从网络获取 HTML 内容。它能够将 HTML 文档解析为一个 DOM 树,方便后续操作。
(二)提取数据
通过选择器(Selectors),可以轻松地从 HTML 文档中提取特定的元素和属性。例如,提取所有链接、图片地址等。
(三)修改文档结构
Jsoup 允许你修改 HTML 文档的结构,如添加、删除或修改元素和属性。
(四)输出 HTML
可以将修改后的 HTML 文档输出为字符串,或者保存到文件中。
二、Jsoup 的基本使用
(一)添加依赖
如果你使用 Maven 管理项目,可以在 pom.xml 文件中添加以下依赖:
xml
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.14.3</version> </dependency>
(二)解析 HTML 文档
从字符串解析 HTML:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupExample {
public static void main(String[] args) {
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
System.out.println(doc.title());
}
}从文件解析 HTML:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.File;
import java.io.IOException;
public class JsoupExample {
public static void main(String[] args) throws IOException {
File input = new File("example.html");
Document doc = Jsoup.parse(input, "UTF-8");
System.out.println(doc.title());
}
}从 URL 获取 HTML:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
System.out.println(doc.title());
} catch (IOException e) {
e.printStackTrace();
}
}
}(三)提取数据
使用选择器提取特定元素:
java
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) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
Elements links = doc.select("a[href]");
for (Element link : links) {
System.out.println(link.attr("href"));
System.out.println(link.text());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}提取特定属性:
java
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) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
Elements images = doc.select("img[src]");
for (Element img : images) {
System.out.println(img.attr("src"));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}(四)修改文档结构
添加元素:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
Element newParagraph = new Element("p").text("This is a new paragraph.");
doc.body().appendChild(newParagraph);
System.out.println(doc.html());
} catch (IOException e) {
e.printStackTrace();
}
}
}删除元素:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
Element toRemove = doc.select("p").first();
toRemove.remove();
System.out.println(doc.html());
} catch (IOException e) {
e.printStackTrace();
}
}
}修改元素属性:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
Element link = doc.select("a").first();
link.attr("href", "http://newurl.com");
System.out.println(doc.html());
} catch (IOException e) {
e.printStackTrace();
}
}
}(五)输出 HTML
将修改后的 HTML 输出为字符串:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
System.out.println(doc.html());
} catch (IOException e) {
e.printStackTrace();
}
}
}保存到文件:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.html"))) {
writer.write(doc.html());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}三、注意事项
(一)网络请求
在从网络获取 HTML 时,可能会遇到网络问题或目标网站的反爬虫机制。建议合理设置请求频率,避免对目标网站造成过大压力。
(二)选择器语法
Jsoup 的选择器语法类似于 CSS 选择器,非常强大。建议熟悉常用的选择器语法,以便更高效地提取数据。
(三)异常处理
在实际开发中,建议添加异常处理机制,确保程序的健壮性。
四、总结
Jsoup 是一个非常强大的 HTML 解析库,可以轻松地解析 HTML 文档、提取数据、修改文档结构等。通过本文的介绍和代码示例,你应该能够快速上手使用 Jsoup。希望这些内容对你有所帮助,祝你在开发中取得成功!Jsoup 是一个开源的 Java 库,专门用于解析 HTML 文档。它提供了非常强大的功能,可以轻松地从 HTML 中提取数据、修改文档结构等。本文将详细介绍 Jsoup 的基本使用方法,帮助你快速上手。
一、Jsoup 的功能
(一)解析 HTML 文档
Jsoup 可以解析本地 HTML 文件或从网络获取 HTML 内容。它能够将 HTML 文档解析为一个 DOM 树,方便后续操作。
(二)提取数据
通过选择器(Selectors),可以轻松地从 HTML 文档中提取特定的元素和属性。例如,提取所有链接、图片地址等。
(三)修改文档结构
Jsoup 允许你修改 HTML 文档的结构,如添加、删除或修改元素和属性。
(四)输出 HTML
可以将修改后的 HTML 文档输出为字符串,或者保存到文件中。
二、Jsoup 的基本使用
(一)添加依赖
如果你使用 Maven 管理项目,可以在 pom.xml 文件中添加以下依赖:
xml
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.14.3</version> </dependency>
(二)解析 HTML 文档
从字符串解析 HTML:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupExample {
public static void main(String[] args) {
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
System.out.println(doc.title());
}
}从文件解析 HTML:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.File;
import java.io.IOException;
public class JsoupExample {
public static void main(String[] args) throws IOException {
File input = new File("example.html");
Document doc = Jsoup.parse(input, "UTF-8");
System.out.println(doc.title());
}
}从 URL 获取 HTML:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
System.out.println(doc.title());
} catch (IOException e) {
e.printStackTrace();
}
}
}(三)提取数据
使用选择器提取特定元素:
java
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) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
Elements links = doc.select("a[href]");
for (Element link : links) {
System.out.println(link.attr("href"));
System.out.println(link.text());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}提取特定属性:
java
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) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
Elements images = doc.select("img[src]");
for (Element img : images) {
System.out.println(img.attr("src"));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}(四)修改文档结构
添加元素:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
Element newParagraph = new Element("p").text("This is a new paragraph.");
doc.body().appendChild(newParagraph);
System.out.println(doc.html());
} catch (IOException e) {
e.printStackTrace();
}
}
}删除元素:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
Element toRemove = doc.select("p").first();
toRemove.remove();
System.out.println(doc.html());
} catch (IOException e) {
e.printStackTrace();
}
}
}修改元素属性:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
Element link = doc.select("a").first();
link.attr("href", "http://newurl.com");
System.out.println(doc.html());
} catch (IOException e) {
e.printStackTrace();
}
}
}(五)输出 HTML
将修改后的 HTML 输出为字符串:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
System.out.println(doc.html());
} catch (IOException e) {
e.printStackTrace();
}
}
}保存到文件:
java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class JsoupExample {
public static void main(String[] args) {
try {
Document doc = Jsoup.connect("http://example.com/").get();
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.html"))) {
writer.write(doc.html());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}三、注意事项
(一)网络请求
在从网络获取 HTML 时,可能会遇到网络问题或目标网站的反爬虫机制。建议合理设置请求频率,避免对目标网站造成过大压力。
(二)选择器语法
Jsoup 的选择器语法类似于 CSS 选择器,非常强大。建议熟悉常用的选择器语法,以便更高效地提取数据。
(三)异常处理
在实际开发中,建议添加异常处理机制,确保程序的健壮性。
四、总结
Jsoup 是一个非常强大的 HTML 解析库,可以轻松地解析 HTML 文档、提取数据、修改文档结构等。通过本文的介绍和代码示例,你应该能够快速上手使用 Jsoup。希望这些内容对你有所帮助,祝你在开发中取得成功!