如何使用 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 ❤️

相关推荐
曹牧2 分钟前
Java:SQL 注入漏洞
数据库
2601_9669496511 分钟前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
蒸鱼Yuzheng15 分钟前
Python 游戏测试开发怎么准备:日志解析、接口校验、并发与可维护性
自动化测试·python·测试开发·面试题·游戏测试
m0_7345717622 分钟前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
Ivanqhz28 分钟前
BM1688 双核架构
python·深度学习·神经网络·cnn·mlir
程序员JerrySUN36 分钟前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
Java后端的Ai之路1 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝
oradh1 小时前
Oracle Undo问题总结(ORA-600 [4xxx] 系列错误)
数据库·oracle
达梦数据1 小时前
DMDRS辅助表生成规则与作用
数据库·oracle
‎ദ്ദിᵔ.˛.ᵔ₎1 小时前
MySQL 表约束
数据库·mysql