jsoup - 快速指南

jsoup - 概述

jsoup 是一个基于 Java 的库,用于处理基于 HTML 的内容。它提供了一个非常方便的 API 来提取和操作数据,使用最好的 DOM、CSS 和类似 jquery 的方法。它实现了 WHATWG HTML5 规范,并将 HTML 解析为与现代浏览器相同的 DOM。

jsoup 库实现了 WHATWG HTML5 规范,并将 HTML 内容解析为与现代浏览器相同的 DOM。

jsonp 库提供以下功能。

  1. 多读取支持 −它使用 URL、文件或字符串读取和解析 HTML。

  2. CSS 选择器 它可以使用 DOM 遍历或 CSS 选择器查找和提取数据。

  3. DOM 操作 它可以操作 HTML 元素、属性和文本。

  4. 防止 XSS 攻击它可以根据给定的安全白名单清除用户提交的内容,以防止 XSS 攻击。

  5. 整洁它输出整洁的 HTML。

  6. 处理无效数据 − jsoup 可以处理未关闭的标签、隐式标签,并可以可靠地创建文档结构。

jsoup - 环境设置

步骤 1:验证机器中的 Java 安装

首先,打开控制台并根据您正在使用的操作系统执行 java 命令。

OS 任务 命令
Windows 打开命令控制台 c:\> java -version
Linux 打开命令终端 $ java -version
Mac 打开终端 machine:< joseph$ java -version

让我们验证所有操作系统的输出 −

OS 输出
Windows

Java 11.0.11 2021-04-20 LTS

Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)

Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)

Linux

Java 11.0.11 2021-04-20 LTS

Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)

Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)

Mac

Java 11.0.11 2021-04-20 LTS

Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)

Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)

如果您的系统上未安装 Java,请从以下链接下载 Java 软件开发工具包 (SDK) www.oracle.com/technetwork/java/javase/downloads/index.html。我们假设 Java 11.0.11 为本教程的安装版本。

步骤 2:设置 JAVA 环境

设置 JAVA_HOME 环境变量以指向您的机器上安装 Java 的基本目录位置。例如。

OS 输出
Windows 将环境变量 JAVA_HOME 设置为 C:\Program Files\Java\jdk11.0.11
Linux export JAVA_HOME = /usr/local/java-current
Mac export JAVA_HOME = /Library/Java/Home

将 Java 编译器位置附加到系统路径。

OS 输出
Windows 在系统变量 Path 的末尾附加字符串 C:\Program Files\Java\jdk11.0.11\bin
Linux export PATH = $PATH:$JAVA_HOME/bin/
Mac 不需要

使用命令 java -version 验证 Java 安装,如上所述。

步骤 3:下载 jsoup 存档

Maven 存储库。在撰写本教程时,我们已经下载了 jsoup-1.14.3.jar 并将其复制到 C:\>jsoup 文件夹中。

操作系统 存档名称
Windows jsoup-1.14.3.jar
Linux jsoup-1.14.3.jar
Mac jsoup-1.14.3.jar

步骤 4:设置 jsoup 环境

设置 JSOUP_HOME 环境变量以指向 jsoup jar 存储在您机器上的基本目录位置。假设我们已将 jsoup-1.14.3.jar 存储在 JSOUP 文件夹中。

Sr.No OS &描述
1

Windows

将环境变量 JSOUP_HOME 设置为 C:\JSOUP

2

Linux

export JSOUP_HOME = /usr/local/JSOUP

3

Mac

export JSOUP_HOME = /Library/JSOUP

步骤 5:设置 CLASSPATH 变量

CLASSPATH 环境变量设置为指向 JSOUP jar位置。

Sr.No OS &说明
1

Windows

将环境变量 CLASSPATH 设置为 %CLASSPATH%;%JSOUP_HOME%\jsoup-1.14.3.jar;.;

2

Linux

export CLASSPATH = $CLASSPATH:$JSOUP_HOME/jsoup-1.14.3.jar:.

3

Mac

export CLASSPATH = $CLASSPATH:$JSOUP_HOME/jsoup-1.14.3.jar:.

jsoup - 解析字符串

以下示例将展示如何将 HTML 字符串解析为 Document 对象。

语法

Document document = Jsoup.parse(html);

其中

  • document − document 对象表示 HTML DOM。

  • Jsoup − 主类用于解析给定的 HTML 字符串。

  • html − HTML 字符串。

说明

parse(String html) 方法将输入 HTML 解析为新 Document。该文档对象可用于遍历并获取 html dom 的详细信息。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupTester {
   public static void main(String[] args) {
      String html = "<html><head><title>Sample Title</title></head>"
         + "<body><p>Sample Content</p></body></html>";
      Document document = Jsoup.parse(html);
      System.out.println(document.title());
      Elements paragraphs = document.getElementsByTag("p");
      for (Element paragraph : paragraphs) {
            System.out.println(paragraph.text());
      }
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Sample Title
Sample Content

jsoup - 解析 body

以下示例将展示如何将 HTML 片段字符串解析为 Element 对象作为 html 主体。

语法

Document document = Jsoup.parseBodyFragment(html);
Element body = document.body();

其中

  • document − document 对象表示 HTML DOM。

  • Jsoup − 主类用于解析给定的 HTML 字符串。

  • html − HTML 片段字符串。

  • body −表示文档 body 元素的子元素,相当于 document.getElementsByTag("body")。

说明

parseBodyFragment(String html) 方法将输入 HTML 解析为新文档。此文档对象可用于遍历并获取 html body 片段的详细信息。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupTester {
   public static void main(String[] args) {
      String html = "<div><p>Sample Content</p>";
      Document document = Jsoup.parseBodyFragment(html);
      Element body = document.body();
      Elements paragraphs = body.getElementsByTag("p");
      for (Element paragraph : paragraphs) {
         System.out.println(paragraph.text());
      }
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Sample Content

jsoup - 加载 URL

以下示例将展示如何使用 URL 从 Web 获取 HTML,然后查找其数据。

语法

String url = "http://www.google.com";
Document document = Jsoup.connect(url).get();

其中

  • document − document 对象表示 HTML DOM。

  • Jsoup − 主类用于连接 URL 并获取 HTML 字符串。

  • url −要加载的 html 页面的 url。

描述

connect(url) 方法与 url 建立连接,get() 方法返回所请求 url 的 html。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JsoupTester {
   public static void main(String[] args) throws IOException {
      String url = "http://www.google.com";
      Document document = Jsoup.connect(url).get();
      System.out.println(document.title());
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Google

jsoup - 加载文件

以下示例将展示如何使用文件从磁盘中获取 HTML,然后查找其数据。

语法

String url = "http://www.google.com";
Document document = Jsoup.connect(url).get();

其中

  • document − document 对象代表 HTML DOM。

  • Jsoup − 主类用于连接 url 并获取 HTML 字符串。

  • url −要加载的 html 页面的 url。

描述

connect(url) 方法与 url 建立连接,get() 方法返回所请求 url 的 html。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JsoupTester {
   public static void main(String[] args) throws IOException
      , URISyntaxException {
      URL path = ClassLoader.getSystemResource("test.html");
      File input = new File(path.toURI());
      Document document = Jsoup.parse(input, "UTF-8");
      System.out.println(document.title());
   }
}

test.htm

在 C:\jsoup 文件夹中创建以下 test.htm 文件。

<html>
   <head>
      <title>Sample Title</title>
   </head>
   <body>
      <p>Sample Content</p>
   </body>
</html>

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Sample Title

jsoup - 使用 DOM 方法

以下示例将展示将 HTML 字符串解析为 Document 对象后如何使用类似 DOM 的方法。

语法

Document document = Jsoup.parse(html);
Element sampleDiv = document.getElementById("sampleDiv");
Elements links = sampleDiv.getElementsByTag("a");

其中

  • document − document 对象代表 HTML DOM。

  • Jsoup − 主类用于解析给定的 HTML 字符串。

  • html − HTML 字符串。

  • sampleDiv − Element 对象表示由 id"sampleDiv"标识的 html 节点元素。

  • links − Elements 对象表示由标签"a"标识的多个节点元素。

描述

parse(String html) 方法将输入的 HTML 解析为新文档。此文档对象可用于遍历并获取 html dom 的详细信息。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupTester {
   public static void main(String[] args) {
      String html = "<html><head><title>Sample Title</title></head>"
         + "<body>"
         + "<p>Sample Content</p>"
         + "<div id='sampleDiv'><a href='www.google.com'>Google</a></div>"
         +"</body></html>";
      Document document = Jsoup.parse(html);
      System.out.println(document.title());
      Elements paragraphs = document.getElementsByTag("p");
      for (Element paragraph : paragraphs) {
         System.out.println(paragraph.text());
      }

      Element sampleDiv = document.getElementById("sampleDiv");
      System.out.println("Data: " + sampleDiv.text());
      Elements links = sampleDiv.getElementsByTag("a");

      for (Element link : links) {
         System.out.println("Href: " + link.attr("href"));
         System.out.println("Text: " + link.text());
      }
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Sample Title
Sample Content
Data: Google
Href: www.google.com
Text: Google

jsoup - 使用选择器语法

以下示例将展示将 HTML 字符串解析为 Document 对象后使用选择器方法的情况。jsoup 支持与 CSS 选择器类似的选择器。

语法

Document document = Jsoup.parse(html);
Element sampleDiv = document.getElementById("sampleDiv");
Element links = sampleDiv.getElementsByTag("a");

其中

  • document − document 对象代表 HTML DOM。

  • Jsoup − 主类用于解析给定的 HTML 字符串。

  • html − HTML 字符串。

  • sampleDiv − Element 对象表示由 id"sampleDiv"标识的 html 节点元素。

  • links − Elements 对象表示由标签"a"标识的多个节点元素。

描述

document.select(expression) 方法解析给定的 CSS 选择器表达式以选择 html dom 元素。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupTester {
   public static void main(String[] args) {
   
      String html = "<html><head><title>Sample Title</title></head>"
         + "<body>"
         + "<p>Sample Content</p>"
         + "<div id='sampleDiv'><a href='www.google.com'>Google</a>"
         + "<h3><a>Sample</a><h3>"
         +"</div>"
         + "<div id='imageDiv' class='header'><img name='google' src='google.png' />"
         + "<img name='yahoo' src='yahoo.jpg' />"
         +"</div>"
         +"</body></html>";
        Document  document = Jsoup.parse(html);
        
        //a 带有 href
        Elements links = document.select("a[href]");
        
        for (元素 link : links) {
        System.out.println("Href: " + link.attr("href"));
        System.out.println("Text: " + link.text());
        }
        
        // img 带有 src 结尾的 .png
        Elements pngs = document.select("img[src$=.png]");
        
        for (元素 png : pngs) {
        System.out.println("Name: " + png.attr("name"));
        }
        
        // div 带有 class=header
        Elements headerDiv = document.select("div.header").first();
        System.out.println("Id: " + headerDiv.id());
        
        // 在 h3 之后直接指向 a
        Elements sampleLinks = document.select("h3 > a");
        
        for (Element link : sampleLinks) {
        System.out.println("Text: " + link.text());
        }
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Href: www.google.com
Text: Google
Name: google
Id: imageDiv
Text: Sample

jsoup - 提取属性

以下示例将展示如何使用方法将 HTML 字符串解析为 Document 对象后获取 dom 元素的属性。

语法

Document document = Jsoup.parse(html);
Element link = document.select("a").first();

System.out.println("Href: " + link.attr("href"));

其中

  • document − document 对象代表 HTML DOM。

  • Jsoup − 主类用于解析给定的 HTML 字符串。

  • html − HTML 字符串。

  • link − Element 对象表示表示锚标记的 html 节点元素。

  • link.attr() − attr(attribute) 方法检索元素属性。

描述

Element 对象表示 dom 元素,并提供各种方法来获取 dom 元素的属性。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupTester {
   public static void main(String[] args) {
      String html = "<html><head><title>Sample Title</title></head>"
         + "<body>"
         + "<p>Sample Content</p>"
         + "<div id='sampleDiv'><a href='www.google.com'>Google</a>"
         + "<h3><a>Sample</a><h3>"
         +"</div>"
         +"</body></html>";
      Document document = Jsoup.parse(html);

      //a with href
      Element link = document.select("a").first();         

      System.out.println("Href: " + link.attr("href"));
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Href: www.google.com

jsoup - 提取 text 文本

以下示例将展示如何使用方法将 HTML 字符串解析为 Document 对象后获取文本。

语法

Document document = Jsoup.parse(html);
Element link = document.select("a").first();
System.out.println("Text: " + link.text());

其中

  • document − document 对象代表 HTML DOM。

  • Jsoup − 主类用于解析给定的 HTML 字符串。

  • html − HTML 字符串。

  • link − Element 对象表示表示锚标记的 html 节点元素。

  • link.text() − text() 方法检索元素文本。

描述

Element 对象表示 dom 元素,并提供各种方法来获取 dom 元素的文本。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupTester {
   public static void main(String[] args) {
      String html = "<html><head><title>Sample Title</title></head>"
         + "<body>"
         + "<p>Sample Content</p>"
         + "<div id='sampleDiv'><a href='www.google.com'>Google</a>"
         + "<h3><a>Sample</a><h3>"
         +"</div>"
         +"</body></html>";
      Document document = Jsoup.parse(html);

      //a with href
      Element link = document.select("a").first();         

      System.out.println("Text: " + link.text());
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Text: Google

jsoup - 提取 HTML

以下示例将展示在将 HTML 字符串解析为 Document 对象后,如何使用方法来获取内部 html 和外部 html。

语法

Document document = Jsoup.parse(html);
Element link = document.select("a").first();

System.out.println("Outer HTML: " + link.outerHtml());
System.out.println("Inner HTML: " + link.html());

其中

  • document − document 对象代表 HTML DOM。

  • Jsoup −主类来解析给定的 HTML 字符串。

  • html − HTML 字符串。

  • link − Element 对象表示表示锚标记的 html 节点元素。

  • link.outerHtml() − outerHtml() 方法检索元素完整的 html。

  • link.html() − html() 方法检索元素内部 html。

描述

Element 对象表示 dom 元素并提供各种方法来获取 dom 元素的 html。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupTester {
   public static void main(String[] args) {
      String html = "<html><head><title>Sample Title</title></head>"
         + "<body>"
         + "<p>Sample Content</p>"
         + "<div id='sampleDiv'><a href='www.google.com'>Google</a>"
         + "<h3><a>Sample</a><h3>"
         +"</div>"
         +"</body></html>";
      Document document = Jsoup.parse(html);

      //a with href
      Element link = document.select("a").first();         

      System.out.println("Outer HTML: " + link.outerHtml());
      System.out.println("Inner HTML: " + link.html());
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Outer HTML: <a href="www.google.com">Google</a>
Inner HTML: Google

jsoup - 使用 URL

以下示例将展示可以提供 html 页面中存在的相对和绝对 URL 的方法。

语法

String url = "http://www.tutorialspoint.com/";
Document document = Jsoup.connect(url).get();
Element link = document.select("a").first();

System.out.println("相对链接:" + link.attr("href"));
System.out.println("绝对链接:" + link.attr("abs:href"));
System.out.println("绝对链接:" + link.absUrl("href"));

其中

  • document − document 对象表示 HTML DOM。

  • Jsoup − 主类用于连接到 url 并获取 html 内容。

  • link − Element 对象表示代表锚标记的 html 节点元素。

  • link.attr("href") − 提供锚标记中 href 的值。它可以是相对的,也可以是绝对的。

  • link.attr("abs:href") − 在根据文档的基本 URI 解析后提供绝对 url。

  • link.absUrl("href") −在根据文档的基本 URI 进行解析后,提供绝对 URL。

描述

Element 对象表示一个 dom 元素,并提供方法来获取 html 页面中存在的相对和绝对 URL。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupTester {
   public static void main(String[] args) throws IOException {
      String url = "http://www.tutorialspoint.com/";
      Document document = Jsoup.connect(url).get();

      Element link = document.select("a").first();
      System.out.println("Relative Link: " + link.attr("href"));
      System.out.println("Absolute Link: " + link.attr("abs:href"));
      System.out.println("Absolute Link: " + link.absUrl("href"));
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Relative Link: index.htm
Absolute Link: https://www.tutorialspoint.com/index.htm
Absolute Link: https://www.tutorialspoint.com/index.htm

jsoup - 设置属性

以下示例将展示如何使用方法设置 dom 元素的属性、将 HTML 字符串解析为 Document 对象后批量更新和添加/删除类方法。

语法

Document document = Jsoup.parse(html);
Element link = document.select("a").first();
link.attr("href","www.yahoo.com");
link.addClass("header");
link.removeClass("header");

其中

  • document − document 对象代表 HTML DOM。

  • Jsoup −主类来解析给定的HTML字符串。

  • html − HTML字符串。

  • link − Element对象表示代表锚标记的html节点元素。

  • link.attr() − attr(attribute,value)方法设置元素属性对应的值。

  • link.addClass() − addClass(class)方法在class属性下添加类。

  • link.removeClass() − removeClass(class) 方法删除 class 属性下的类。

描述

Element 对象表示一个 dom 元素,并提供各种方法来获取 dom 元素的属性。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupTester {
   public static void main(String[] args) {
   
      String html = "<html><head><title>Sample Title</title></head>"
         + "<body>"
         + "<p>Sample Content</p>"
         + "<div id='sampleDiv'><a id='googleA' href='www.google.com'>Google</a></div>"
         + "<div class='comments'><a href='www.sample1.com'>Sample1</a>"
         + "<a href='www.sample2.com'>Sample2</a>"
         + "<a href='www.sample3.com'>Sample3</a><div>"
         +"</div>"
         + "<div id='imageDiv' class='header'><img name='google' src='google.png' />"
         + "<img name='yahoo' src='yahoo.jpg' />"
         +"</div>"
         +"</body></html>";
      	Document document = Jsoup.parse(html);

        //示例:设置属性
        Element link = document.getElementById("googleA");
        System.out.println("修改前的外部 HTML :" + link.outerHtml());
        link.attr("href","www.yahoo.com");
        System.out.println("修改后的外部 HTML :" + link.outerHtml());
        System.out.println("---");
        
        //示例:添加类
        Element div = document.getElementById("sampleDiv");
        System.out.println("修改前的外部 HTML :" + div.outerHtml());
        link.addClass("header");
        System.out.println("修改后的外部 HTML :" + div.outerHtml());
        System.out.println("---");
        
        //示例:删除类
        Element div1 = document.getElementById("imageDiv");
        System.out.println("修改前的外部 HTML :" + div1.outerHtml());
        div1.removeClass("header");
        System.out.println("修改后的外部 HTML :" + div1.outerHtml());
        System.out.println("---");
        
        //示例:批量更新
        Element links = document.select("div.comments a");
        System.out.println("修改前的外部 HTML :" + links.outerHtml());
        links.attr("rel", "nofollow");
        System.out.println("修改前的外部 HTML :" + links.outerHtml());
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Outer HTML Before Modification :<a id="googleA" href="www.google.com">Google</a>
Outer HTML After Modification :<a id="googleA" href="www.yahoo.com">Google</a>
---
Outer HTML Before Modification :<div id="sampleDiv">
 <a id="googleA" href="www.yahoo.com">Google</a>
</div>
Outer HTML After Modification :<div id="sampleDiv">
 <a id="googleA" href="www.yahoo.com" class="header">Google</a>
</div>
---
Outer HTML Before Modification :<div id="imageDiv" class="header">
 <img name="google" src="google.png">
 <img name="yahoo" src="yahoo.jpg">
</div>
Outer HTML After Modification :<div id="imageDiv" class="">
 <img name="google" src="google.png">
 <img name="yahoo" src="yahoo.jpg">
</div>
---
Outer HTML Before Modification :<a href="www.sample1.com">Sample1</a>
<a href="www.sample2.com">Sample2</a>
<a href="www.sample3.com">Sample3</a>
Outer HTML Before Modification :<a href="www.sample1.com" rel="nofollow">Sample1</a>
<a href="www.sample2.com" rel="nofollow">Sample2</a>
<a href="www.sample3.com" rel="nofollow">Sample3</a>

jsoup - 设置 HTML

以下示例将展示在将 HTML 字符串解析为 Document 对象后,如何使用方法将 html 设置、添加到或添加到 dom 元素。

语法

Document document = Jsoup.parse(html);
Element div = document.getElementById("sampleDiv");
div.html("<p>This is a sample content.</p>");
div.prepend("<p>Initial Text</p>");
div.append("<p>End Text</p>");

其中

  • document − document 对象表示 HTML DOM。

  • Jsoup − 主类用于解析给定的 HTML 字符串。

  • html − HTML 字符串。

  • div − Element 对象表示代表锚标记的 html 节点元素。

  • div.html() − html(content) 方法用相应的值替换元素的外部 html。

  • div.prepend() − prepend(content) 方法将内容添加到外部 html 之前。

  • div.append() − append(content) 方法将内容添加到外部 html 之后。

描述

Element 对象表示 dom 元素,并提供各种方法来设置、添加或附加 html 到 dom 元素。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupTester {
   public static void main(String[] args) {
      String html = "<html><head><title>Sample Title</title></head>"
         + "<body>"
         + "<div id='sampleDiv'><a id='googleA' href='www.google.com'>Google</a></div>"       
         +"</body></html>";
      Document document = Jsoup.parse(html);

      Element div = document.getElementById("sampleDiv");
      System.out.println("Outer HTML Before Modification :"  + div.outerHtml());
      div.html("<p>This is a sample content.</p>");
      System.out.println("Outer HTML After Modification :"  + div.outerHtml());
      div.prepend("<p>Initial Text</p>");
      System.out.println("After Prepend :"  + div.outerHtml());
      div.append("<p>End Text</p>");
      System.out.println("After Append :"  + div.outerHtml());          
   }
}

验证结果

使用 javac 编译器编译该类,如下所示:

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Outer HTML Before Modification :
<div id="sampleDiv">
 <a id="googleA" href="www.google.com">Google</a>
</div>
Outer HTML After Modification :
<div id="sampleDiv">
 <p>This is a sample content.</p>
</div>
After Prepend :
<div id="sampleDiv">
 <p>Initial Text</p>
 <p>This is a sample content.</p>
</div>
After Append :
<div id="sampleDiv">
 <p>Initial Text</p>
 <p>This is a sample content.</p>
 <p>End Text</p>
</div>
Outer HTML Before Modification :
<span>Sample Content</span>
Outer HTML After Modification :
<span>Sample Content</span>

jsoup - 设置 text 文本内容

以下示例将展示在将 HTML 字符串解析为 Document 对象后,如何使用方法设置、添加或附加文本到 dom 元素。

语法

Document document = Jsoup.parse(html);
Element div = document.getElementById("sampleDiv");
div.text("This is a sample content.");
div.prepend("Initial Text.");
div.append("End Text.");

其中

  • document − document 对象代表 HTML DOM。

  • Jsoup −主类来解析给定的 HTML 字符串。

  • html − HTML 字符串。

  • div − Element 对象表示代表锚标记的 html 节点元素。

  • div.text() − text(content) 方法用相应的值替换元素的内容。

  • div.prepend() − prepend(content) 方法将内容添加到外部 html 之前。

  • div.append() − append(content) 方法将内容添加到外部 html 之后。

描述

Element 对象表示 dom 元素,并提供各种方法来设置、添加或附加 html 到 dom 元素。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupTester {
   public static void main(String[] args) {
      String html = "<html><head><title>Sample Title</title></head>"
         + "<body>"
         + "<div id='sampleDiv'><a id='googleA' href='www.google.com'>Google</a></div>"       
         +"</body></html>";
      Document document = Jsoup.parse(html);

      Element div = document.getElementById("sampleDiv");
      System.out.println("Outer HTML Before Modification :"  + div.outerHtml());
      div.text("This is a sample content.");
      System.out.println("Outer HTML After Modification :"  + div.outerHtml());
      div.prepend("Initial Text.");
      System.out.println("After Prepend :"  + div.outerHtml());
      div.append("End Text.");
      System.out.println("After Append :"  + div.outerHtml());          
   }
}

验证结果

使用 javac 编译器编译类,如下所示 −

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 以查看结果。

C:\jsoup>java JsoupTester

查看结果。

Outer HTML Before Modification :
<div id="sampleDiv">
   <a id="googleA" href="www.google.com">Google</a>
</div>
   Outer HTML After Modification :
<div id="sampleDiv">
   This is a sample content.
</div>
   After Prepend :
<div id="sampleDiv">
   Initial Text.This is a sample content.
</div>
   After Append :
<div id="sampleDiv">
   Initial Text.This is a sample content.End Text.
</div>

jsoup - 清理 HTML

以下示例将展示如何预防 XSS 攻击或跨站点脚本攻击。

语法

String safeHtml = Jsoup.clean(html, Safelist.basic());

其中

  • Jsoup − 主类用于解析给定的 HTML 字符串。

  • html − 初始 HTML 字符串。

  • safeHtml − 清理后的 HTML。

  • Safelist −对象提供默认配置以保护 html。

  • clean() − 使用白名单清理 html。

描述

Jsoup 对象使用白名单配置清理 html。

示例

使用您选择的任何编辑器在 C:/> jsoup 中创建以下 java 程序。

JsoupTester.java

import org.jsoup.Jsoup;
import org.jsoup.safety.Safelist;

public class JsoupTester {
   public static void main(String[] args) {
      String html = "<p><a href='http://example.com/'"
         +" onclick='checkData()'>Link</a></p>";

      System.out.println("Initial HTML: " + html);
      String safeHtml =  Jsoup.clean(html, Safelist.basic());
      System.out.println("Cleaned HTML: " +safeHtml);
   }
}

验证结果

使用 javac 编译器编译类,如下所示 −

C:\jsoup>javac JsoupTester.java

现在运行 JsoupTester 查看结果。

C:\jsoup>java JsoupTester

查看结果。

Initial HTML: <p><a href='http://example.com/' onclick='checkData()'>Link</a></p>
Cleaned HTML: <p><a href="http://example.com/" rel="nofollow">Link</a></p>