用 Java 和 Jsoup 解析 HTML

如何使用 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
  • 为 cookie、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>

要使用 Jsoup 在 Java 中解析 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("标题" + document.select("h1").text());
System.out.println("段落:" + 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 结构中检索特定元素或属性。

例如,提取所有链接 (<a> 标签)及其 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]"); // 全部选择 <a> 带有 href 属性的标记
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 HHTMLManipulationExample {
public static void main(String[] args) {
String html = "<html><body><p>\u539f\u6587<\/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>\u8fd9\u662f <script>alert('unsafe')<\/script> content<\/p>";
String cleanHtml = Jsoup.clean(dirtyHtml, Whitelist.basic());
System.out.println("Cleaned HTML: " + cleanHtml);
}
}

结论

Jsoup 是一款多功能、高效的工具,用于用 Java 解析、处理和提取 HTML 文档中的数据。凭借其简单的应用程序接口和强大的类似 CSS 的选择器功能,它被广泛用于网络搜刮、数据提取和内容处理任务。

按照本指南中的步骤和示例,您可以开始高效地解析和处理 HTML 内容。无论您是需要处理复杂的网络爬取项目还是简单的文档操作任务,Jsoup 都能提供完成工作所需的灵活性和性能。

类似文章