JavaRush /Java 博客 /Random-ZH /如何使用 Jsoup 在 Java 中解析 HTML 文件的 3 个示例
Sdu
第 17 级

如何使用 Jsoup 在 Java 中解析 HTML 文件的 3 个示例

已在 Random-ZH 群组中发布
如何使用 Jsoup 在 Java 中解析 HTML 文件的 3 个示例 - 1HTML是WEB的核心,你看到的所有互联网页面,无论是使用JavaScript、JSP、PHP、ASP还是其他Web技术动态生成的,都是基于HTML的。事实上,您的浏览器会解析 HTML 并以您方便的方式显示它。但是,如果您需要解析 HTML 文档并查找其中的某些元素、标签、属性,或者使用 Java 程序检查特定元素是否存在,该怎么办?如果您已经成为一名 Java 程序员多年,我相信您会使用 DOM 或 SAX 等解析器来完成 XML 解析。但具有讽刺意味的是,有时您需要从不包含 Servlet 和其他 Java Web 技术的基本 Java 应用程序中解析 HTML 文档。而且,Core JDK也不包含HTTP或HTML库。这就是为什么,当谈到解析 HTML 文件时,许多 Java 程序员会询问 Google 如何在 Java 中获取 HTML 标签的值。当我遇到这个问题时,我确信解决方案将是一个实现我需要的功能的开源库,但我不知道它会像 Jsoup 一样精彩且功能丰富。它不仅支持读取和解析 JQuery 风格的 HTML 文件、属性、CSS 类,同时还允许您修改它们。使用 Jsoup,您可以对 HTML 文档执行任何您想要的操作。在本文中,我们将解析 HTML 文件并查找标签的名称和属性。我们还将查看从文件和任何 URL(例如 Google 主页)下载和解析 HTML 的示例。

什么是Jsoup

Jsoup 是一个用于处理真实 HTML 的开源 Java 库。它提供了一个非常方便的 API,用于使用最好的 DOM、CSS 和类似 jQuery 的技术来检索和操作数据。Jsoup 实现了 WHATWG HTML5 规范,并将 HTML 解析为与 Chrome 和 Firefox 等现代浏览器相同的 DOM。以下是 Jsoup 库的一些有用功能:
  • Jsoup 可以从 URL、文件或字符串中抓取和解析 HTML。
  • Jsoup 可以使用 DOM 遍历或 CSS 选择器查找和提取数据。
  • Jsoup 允许您操作 HTML 元素、属性和文本。
  • Jsoup 提供对用户提供的信息进行白名单清理,以防止 XSS 攻击。
  • Jsoup 还可以生成“简洁”的 HTML。
Jsoup 旨在处理现实世界中存在的各种 HTML,包括经过正确验证的 HTML 以及不完整、未经验证的标签集。Jsoup 的主要优点之一是它的可靠性。

使用 Jsoup 在 Java 中解析 HTML

在本教程中,我们将看到使用 Jsoup 在 Java 中解析和遍历 HTML 文档的三个不同示例。在第一个示例中,我们将解析一个包含 Java 字符串文字形式的标签的 HTML 字符串。在第二个示例中,我们将从 Internet 下载 HTML 文档,在第三个示例中,我们将下载自己的示例 HTML 文件 login.html 进行解析。该文件是一个示例 HTML 文档,在包含 HTML 表单的“body”部分中包含“title”标签和“div”标签。该表单包含用于输入用户名和密码的字段,以及用于进一步操作的重置和确认按钮。这是可以通过“有效性”检查的“正确”HTML,这意味着所有标签和属性都正确关闭。这就是我们的 HTML 文件的样子:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Login Page</title>
    </head>
    <body>
        <div id="login" class="simple" >
            <form action="login.do">
                Username : <input id="username" type="text" /><br>
                Password : <input id="password" type="password" /><br>
                <input id="submit" type="submit" />
                <input id="reset" type="reset" />
            </form>
        </div>
    </body>
</html>
使用 Jsoup 解析 HTML 非常容易,您所需要做的就是调用静态方法Jsoup.parse()并将 HTML 字符串传递给它。Jsoup 提供了几种重载方法parse(),用于从字符串、文件、基本 URI、URL 和InputStream. 如果 HTML 文件不是 UTF-8 格式,您还可以指定编码以正确读取该文件。该方法parse(String html)将传入的 HTML 解析为新对象Document。在Jsoup中,一个类Document继承自一个类Element,该类扩展了该类Node。该类也Node继承自该类TextNode。只要将非空字符串传递给该方法,就可以保证对Document包含(至少)“head”和“body”元素的对象进行成功、有意义的解析。如果您有一个对象Document,则可以通过调用该类及其父类的适当方法来获取所需的Document数据。 ElementNode

用于解析 HTML 文档的 Java 程序

这是我们用于解析 HTML 字符串、从互联网下载的 HTML 文件和本地 HTML 文件的完整程序。要运行它,您可以使用 IDE(Eclipse 或任何其他)或命令行。在 Eclipse 中这非常简单,只需复制此代码,创建一个新的 Java 项目,右键单击“src”文件夹并粘贴复制的代码。Eclipse 将负责创建具有适当名称的适当包和源代码文件,因此工作量减少了很多。如果您已经有一个 Java 项目,那么这只是第一步。下面的程序演示了解析和遍历 HTML 文件的三个示例。在第一个示例中,我们直接解析包含 HTML 的字符串,在第二个示例中,我们从 URL 下载 HTML 文件,在第三个示例中,我们从本地文件系统下载并解析 HTML 文档。
import java.io.File;
import java.io.IOException;

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

/**
* Java Program to parse/read HTML documents from File using Jsoup library.
* Jsoup is an open source library which allows Java developer to parse HTML
* files and extract elements, manipulate data, change style using DOM, CSS and
* JQuery like method.
*
* @author Javin Paul
*/
public class HTMLParser{

    public static void main(String args[]) {

        // Parse HTML String using JSoup library
        String HTMLSTring = "<!DOCTYPE html>"
                + "<html>"
                + "<head>"
                + "<title>JSoup Example</title>"
                + "</head>"
                + "<body>"
                + "<table><tr><td><h1>HelloWorld</h1></tr>"
                + "</table>"
                + "</body>"
                + "</html>";

        Document html = Jsoup.parse(HTMLSTring);
        String title = html.title();
        String h1 = html.body().getElementsByTag("h1").text();

        System.out.println("Input HTML String to JSoup :" + HTMLSTring);
        System.out.println("After parsing, Title : " + title);
        System.out.println("Afte parsing, Heading : " + h1);

        // JSoup Example 2 - Reading HTML page from URL
        Document doc;
        try {
            doc = Jsoup.connect("http://google.com/").get();
            title = doc.title();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Jsoup Can read HTML page from URL, title : " + title);

        // JSoup Example 3 - Parsing an HTML file in Java
        //Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong
        Document htmlFile = null;
        try {
            htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // right
        title = htmlFile.title();
        Element div = htmlFile.getElementById("login");
        String cssClass = div.className(); // getting class form HTML element

        System.out.println("Jsoup can also parse HTML file directly");
        System.out.println("title : " + title);
        System.out.println("class of div tag : " + cssClass);
    }
}
输出:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
Jsoup HTML 解析器将尽一切努力对您提供的 HTML 进行“干净”的解析,无论其格式是否良好。它可以处理以下错误:
  • 未封闭的标签。例如,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • 隐含标签。例如,打开的<td>Java is Great</td>将被包裹在<table><tr><td>
  • Jsoup 创建健壮的文档结构(HTML 包含 head 和 body,但 body 仅包含相关元素)
Jsoup是一个优秀且可靠的开源库,它使读取html文档、正文片段、html字符串以及直接解析html网页内容变得非常简单。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION