
如何使用 Java 和 Jsoup 解析 HTML
借助 Jsoup,我可以高效地从网页中提取所需信息并处理各种任务。这个库的简洁性和灵活性让我能够专注于任务核心,而不会陷入复杂代码的泥潭。无论是抓取数据还是运行测试,Jsoup 都是一个可靠的选择,能让处理 HTML 变得直观简单。
使用 Jsoup 解析 HTML 的替代方案
在某些情况下,我们可以避免自己抓取或解析数据。看看我整理的最佳网页抓取工具列表,也许你会为自己或你的业务找到完美的解决方案。
对于大规模操作,我推荐使用 Bright Data 或 ScrapingBee。我与它们没有任何关联。
什么是 Jsoup?
Jsoup 是一个强大的 Java 库,专为处理真实世界中的 HTML 而设计。它提供了一个便捷的 API,用于获取、解析和操作 HTML。它最大的优势之一是能够处理有效和无效的 HTML,而这在处理网页时非常常见。
Jsoup 的主要功能
-
从 URL、文件或字符串解析并清理 HTML。
-
使用 DOM 遍历或类似 CSS 的选择器提取数据。
-
操作 HTML 内容。
-
自动清理不受信任的 HTML。
-
支持 cookies、POST 请求和会话处理。
设置 Jsoup
在深入代码之前,你需要将 Jsoup 添加到项目中。如果你使用 Maven,请在 pom.xml 中加入以下依赖:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.3</version> <! - Check for the latest version →
</dependency>
对于 Gradle,请将以下内容添加到 build.gradle:
implementation 'org.jsoup:jsoup:1.15.3'
或者,你也可以从 Jsoup 网站手动下载 jar 文件,并将其添加到项目中。
使用 Jsoup 进行基础 HTML 解析
让我们从一个解析 HTML 文档的简单示例开始。请看以下 HTML 片段:
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>This is a sample paragraph.</p>
</body>
</html>
要在 Java 中使用 Jsoup 解析这段 HTML,你可以编写如下代码:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class HTMLParserExample {
public static void main(String[] args) {
String html = "<html><head><title>Sample Page</title></head>"
+ "<body><h1>Hello, World!</h1><p>This is a sample paragraph.</p></body></html>";
Document document = Jsoup.parse(html);
System.out.println("Title: " + document.title());
System.out.println("Heading: " + document.select("h1").text());
System.out.println("Paragraph: " + document.select("p").text());
}
}
解析 HTML 文件
Jsoup 也可以从本地文件系统加载并解析 HTML 文件。例如:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.File;
import java.io.IOException;
public class HTMLFileParser {
public static void main(String[] args) throws IOException {
File input = new File("path/to/your/file.html");
Document document = Jsoup.parse(input, "UTF-8");
System.out.println("Title: " + document.title());
}
}
从 URL 获取并解析
一个常见用例是从 URL 获取并解析 HTML 文档。这通常用于网页抓取应用程序。
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
public class URLParserExample {
public static void main(String[] args) throws IOException {
String url = "https://example.com";
Document document = Jsoup.connect(url).get();
System.out.println("Title: " + document.title());
System.out.println("First Paragraph: " + document.select("p").first().text());
}
}
使用选择器提取数据
Jsoup 最强大的功能之一是能够使用 CSS 选择器提取数据。这个功能让你可以从 HTML 结构中检索特定元素或属性。
例如,要从网页中提取所有链接( 标签)及其 href 属性:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class LinkExtractor {
public static void main(String[] args) throws IOException {
String url = "https://example.com";
Document document = Jsoup.connect(url).get();
Elements links = document.select("a[href]"); // Select all <a> tags with href attribute
for (Element link : links) {
System.out.println("Link: " + link.attr("href"));
System.out.println("Text: " + link.text());
}
}
}
操作 HTML 元素
Jsoup 还允许你操作 HTML 内容,例如添加或删除元素、改变属性,或修改文本内容。例如,要修改段落中的文本:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class HTMLManipulationExample {
public static void main(String[] args) {
String html = "<html><body><p>Original Text</p></body></html>";
Document document = Jsoup.parse(html);
document.select("p").first().text("Updated Text");
System.out.println(document.html());
}
}
清理 HTML 内容
当你想要净化或清理 HTML 时,Jsoup 提供了移除不需要的标签、属性或元素的方法,因此它非常适合用于输入验证或内容过滤。
import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist;
public class HTMLCleanerExample {
public static void main(String[] args) {
String dirtyHtml = "<p>This is <script>alert('unsafe')</script> content</p>";
String cleanHtml = Jsoup.clean(dirtyHtml, Whitelist.basic());
System.out.println("Cleaned HTML: " + cleanHtml);
}
}
结论
Jsoup 是一个多功能且高效的工具,可用于在 Java 中解析、操作并从 HTML 文档中提取数据。凭借其简单的 API 和强大的类 CSS 选择器能力,它被广泛用于网页抓取、数据提取和内容操作任务。
按照本指南中的步骤和示例,你可以开始高效地解析并处理 HTML 内容。无论你需要处理复杂的网页抓取项目,还是简单的文档操作任务,Jsoup 都能提供完成工作所需的灵活性和性能。
对其他网页抓取指南感兴趣?
-
使用 Scrapy 进行网页抓取
-
使用 Selenium 进行网页抓取
-
用于网页抓取的 JavaScript 与 Python 对比
-
使用 Python lxml 进行网页抓取
-
使用 Excel 进行网页抓取
-
使用 C# 进行网页抓取
如需阅读其他精彩文章,请访问我的个人主页 --- Data Journal ❤️