乒乓世界杯_u20世界杯最新战况 - chhtzx.com

浅谈Java库之Jsoup

6617

一、Jsoup的基本介绍

Jsoup 是一款流行的 Java 库,用于解析、操作和输出 HTML。它提供了非常便捷的 API 来处理 HTML 文档,类似于 jQuery 对于 JavaScript 的作用。Jsoup 能够从 URL、文件或字符串中加载 HTML,并使用 DOM(文档对象模型)方法或 CSS 选择器来查询和操作数据。

二、Jsoup的项目特点

1、灵活的解析:Jsoup 可以解析任意的无序、无效或不规范的 HTML。

2、强大的选择器:支持 CSS 选择器来查找文档中的元素。

3、修改和输出:可以轻松修改 HTML 文档,并以干净的格式输出。

4、安全:自动处理相对和绝对 URL,防止安全问题如 XSS(跨站脚本攻击)。

5、扩展性:支持插件和扩展,可以自定义解析和输出行为。

三、Jsoup的使用方法

要在项目中使用 Jsoup,首先需要添加 Maven 依赖:

org.jsoup

jsoup

1.15.3

请确保使用最新版本的 Jsoup。

核心功能

以下是 Jsoup 的一些核心功能和用法示例:

1. 解析 HTML

从 URL、文件或字符串中解析 HTML:

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

public class JsoupExample {

public static void main(String[] args) {

String html = "First parse"

+ "

Parsed HTML into a doc.

";

Document doc = Jsoup.parse(html);

Element title = doc.select("title").first();

System.out.println(title.text());

}

}

这个例子展示了如何解析一个 HTML 字符串并获取标题标签的文本。

2. 从 URL 加载和解析

从互联网上的 URL 加载 HTML:

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

public class JsoupUrlExample {

public static void main(String[] args) throws Exception {

String url = "http://example.com";

Document doc = Jsoup.connect(url).get();

System.out.println(doc.title());

}

}

这个例子展示了如何从 URL 加载 HTML 并获取页面标题。

3. 使用 CSS 选择器

使用 CSS 选择器来查找元素:

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.select.Elements;

public class JsoupCssSelectorExample {

public static void main(String[] args) {

String html = "

Example

Paragraph

";

Document doc = Jsoup.parse(html);

Elements paragraphs = doc.select("p");

for (org.jsoup.nodes.Element paragraph : paragraphs) {

System.out.println(paragraph.text());

}

}

}

这个例子展示了如何使用 CSS 选择器来选择所有的

标签并打印它们的文本。

4. 修改 HTML

修改 HTML 文档并输出:

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

public class JsoupModifyExample {

public static void main(String[] args) {

String html = "First parse"

+ "

Parsed HTML into a doc.

";

Document doc = Jsoup.parse(html);

Element title = doc.select("title").first();

title.text("New Title"); // 修改标题

System.out.println(doc.toString());

}

}

四、Jsoup的高级用法

1. 从HTML中提取图片

你可以使用 Jsoup 提取 HTML 文档中的所有图片。以下是一个示例代码:

Document doc = Jsoup.connect(url).get();

Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");

这里的正则表达式可以过滤掉非图片类型的元素。

2. 从HTML中提取所有链接

你可以使用 Jsoup 提取 HTML 中的所有链接:

Document doc = Jsoup.connect(url).get();

Elements links = doc.select("a[href]");

然后遍历 links 集合,即可获取每个链接的 href 属性和文本内容。

3. 自定义User-Agent和超时时间

你可以通过以下方式指定 Jsoup 连接的 User-Agent 和超时时间:

Document doc = Jsoup.connect("http://csdn.com")

.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36")

.timeout(10000) // 设置超时时间为10秒

.get();

这样可以模拟浏览器访问,有时对访问某些需要特定 User-Agent 的网站很有用。

4. 修改元素的 HTML 内容

你可以使用 Element 中的 HTML 设置方法来修改元素的内容:

Element div = doc.select("div").first();

div.html("

csdn

"); // 替换 HTML 内容

div.prepend("

a

"); // 在元素前添加 HTML 内容

div.append("

good

"); // 在元素后添加 HTML 内容

这些方法可以非常方便地修改 HTML 文档中的元素和属性。

5. 修改元素的文本内容

对于传入的文本,如果含有像 <, > 等这样的字符,将以文本处理,而非 HTML:

Element div = doc.select("div").first();

div.text(" one "); // 替换文本内容

div.prepend(" two "); // 在元素前添加文本节点

div.append(" three "); // 在元素后添加文本节点

这将清除元素内部的 HTML 内容,然后用提供的文本代替。

6. 高级查询和修改

Jsoup 提供了非常丰富的 API 来进行高级查询和修改 HTML 文档。例如,使用 selectFirst() 选取第一个匹配元素,selectEll() 返回所有匹配元素的列表:

Element firstPara = doc.selectFirst("p");

List allP = doc.select("p");

在修改文档时,除了修改元素的属性外,还可以使用 replaceWith() 方法来替换指定的元素:

Element toBeReplaced = doc.selectFirst("p");

toBeReplaced.replaceWith(new Element("p").text("A new text"));

此外,可以使用 each 方法来遍历元素集合并进行批处理修改:

doc.body().getElementsByTag("a").each(a -> a.attr("rel", "nofollow"));

这段代码遍历了文档中所有的 标签,并将它们的 rel 属性设置为 nofollow。

这些高级用法展示了 Jsoup 在解析和操作 HTML 文档中的深度和灵活性。通过这些示例,你可以开始在你的 Java 项目中使用 Jsoup 来处理更复杂的 HTML 数据。