如何使用 Java 和 Jsoup 解析 HTML

如何使用 Java 和 Jsoup 解析 HTML

借助 Jsoup,我可以高效地从网页中提取所需信息并处理各种任务。这个库的简洁性和灵活性让我能够专注于任务核心,而不会陷入复杂代码的泥潭。无论是抓取数据还是运行测试,Jsoup 都是一个可靠的选择,能让处理 HTML 变得直观简单。

使用 Jsoup 解析 HTML 的替代方案

在某些情况下,我们可以避免自己抓取或解析数据。看看我整理的最佳网页抓取工具列表,也许你会为自己或你的业务找到完美的解决方案。

对于大规模操作,我推荐使用 Bright DataScrapingBee。我与它们没有任何关联。

什么是 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 进行网页抓取

  • 使用 Python 进行网页抓取

  • 使用 C# 进行网页抓取

如需阅读其他精彩文章,请访问我的个人主页 --- Data Journal ❤️

相关推荐
吃好睡好便好1 小时前
MATLAB仿真框图2
开发语言·matlab·仿真·simulink
lsz1525901 小时前
Citrix虚拟化实战:数据库虚拟机扩容流程图文简解
数据库·数据库扩容·citrix虚拟化·平台数据库扩容·虚拟机快照
如何原谅奋力过但无声1 小时前
现代化Python工具:uv、Ruff、Pyright、Rich(只讲重点版)
vscode·python·uv
Logintern091 小时前
DeepAgents 主-子 Agent 的底层实现逻辑完全基于 LangGraph 的图机制
python
云浪2 小时前
从 0 到实战:掌握向量数据库 Milvus,构建 AI 应用的核心能力
javascript·数据库·人工智能
tachibana22 小时前
知识库文档上传接口
数据库·人工智能·大模型·llm
可乐ea2 小时前
Tool Calling 工具调用:让 Agent 查询数据库、调用接口和执行任务
数据库·prompt·agent·tool
小当家.1052 小时前
MCP 协议深度解析:AI 领域的 USB-C 接口
开发语言·人工智能·agent·tool·mcp
码云骑士2 小时前
97-Milvus从零到生产-Standalone-vs-Cluster-索引选择-分片监控扩容
python·milvus