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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值