HTML是Web的核心,无论您是通过JavaScript,JSP,PHP,ASP还是任何其他Web技术动态生成的,您在Internet上看到的所有页面都是基于HTML的。 您的浏览器实际上是解析HTML并为您呈现。 但是,如果需要解析HTML文档并查找某些元素,标签,属性或检查特定元素是否存在,该怎么办,所有这些操作都使用Java程序完成。

如果您从事Java编程已经有几年了,我相信您已经使用DOM和SAX之类的解析器完成了一些XML解析工作。 具有讽刺意味的是,很少有需要从核心Java应用程序解析HTML文档的情况,该应用程序不包括Servlet和其他Java Web技术。 更糟的是,核心JDK中也没有HTTP或HTML库。 这就是为什么在解析HTML文件时 ,许多Java程序员不得不看Google以了解如何获取Java中HTML标记的价值。

当我需要时,我确定会有一个开源库为我实现该功能,但不知道它像JSoup一样出色且功能丰富。 它不仅提供了读取和解析HTML文档的支持,而且还允许您从HTML文件,其属性, JQuery样式的CSS类中提取任何元素,同时还允许您对其进行修改。 您可以使用Jsoup对HTML文档进行任何操作。

在本文中,我们将解析和HTML文件,并找出title和heading标签的值。 我们还将看到通过使用Java解析Google主页来从文件以及任何URL或Internet下载和解析HTML的示例。

Jsoup是用于处理实际HTML的开源Java库。 它提供了使用DOM,CSS和类似jquery的最好方法提取和处理数据的非常方便的API。 Jsoup实现WHATWG HTML5规范,并将HTML解析为与现代浏览器(例如Chrome和Firefox)相同的DOM。 这是jsoup库的一些有用的功能:

  • Jsoup可以从URL,文件或字符串中抓取并解析HTML
  • Jsoup可以使用DOM遍历或CSS选择器来查找和提取数据
  • Jsoup允许您操纵HTML元素,属性和文本
  • Jsoup针对安全的白名单提供干净的用户提交的内容,以防止XSS攻击
  • Jsoup还可以输出整洁HTML

Jsoup旨在处理现实世界中发现的各种HTML,其中包括经过正确验证HTML以完成不完整的非验证标签集合。 Jsoup的核心优势之一是它非常强大。

在此Java HTML解析教程中,我们将看到使用jsoup在Java中解析和遍历HTML文档的三个不同示例。 在第一个示例中,我们将解析一个HTML String ,其内容均为标记,以Java中的String文字形式出现。 在第二个示例中,我们将从网络上下载HTML文档,在第三个示例中,我们将加载我们自己的示例HTML文件login.html进行解析。 此文件是一个示例HTML文档,在正文部分包含一个标题标签和一个div,其中div包含一个HTML表单。 它具有输入标签来捕获用户名和密码,并提供提交和重置按钮以采取进一步措施。 这是可以验证的正确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()方法来从String,文件,基本URI,URL和InputStream中读取HTML文件。 如果它们不是“ UTF-8”格式,也可以指定字符编码以正确读取HTML文件。

parse(String html)方法将输入HTML解析为新的Document。 在Jsoup中,文档扩展了元素,该元素扩展了Node。 同样,TextNode扩展了Node。 只要您传递非null字符串 ,就可以确保您使用包含(至少)head和body元素的Document进行了成功,明智的解析。 拥有文档后,可以通过在Document及其父类Element和Node中调用适当的方法来获取所需的数据。

这是我们完整的Java程序,用于解析HTML字符串,从Internet下载HTML文件和来自本地文件系统HTML文件。 为了运行该程序,您可以使用Eclipse IDE,也可以仅使用任何IDE或命令提示符 。 在Eclipse中,这非常简单,只需复制此代码,创建一个新的Java项目,右键单击src包并将其粘贴。 Eclipse将负责创建具有相同名称的正确的程序包和Java源文件,因此绝对省事。 如果您已经有一个Sample Java项目,那么这只是一步。 以下Java程序显示了3个解析和遍历HTML文件的示例。 在第一个示例中,我们直接解析具有html内容的String ,在第二个示例中,我们解析从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 libraryString 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 URLDocument 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"); // wrongDocument htmlFile = null;try {htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} // righttitle = htmlFile.title();Element div = htmlFile.getElementById("login");String cssClass = div.className(); // getting class form HTML elementSystem.out.println("Jsoup can also parse HTML file directly");System.out.println("title : " + title);System.out.println("class of div tag : " + cssClass);}}
Output:
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创建干净的解析,而不管HTML的格式是否正确。 它可以处理以下错误:
未关闭的标签(例如<p> Java <p> Scala到<p> Java </ p> <p> Scala </ p>)
隐式标签(例如ega裸<td> Java很棒</ td>包裹在<table> <tr> <td>中) 可靠地创建文档结构(html包含头和主体,并且头中仅包含适当的元素)。

Jsoup是一个出色且强大的开源库,它使读取html文档,正文片段,html字符串以及直接从Web上直接解析html内容变得非常容易。

翻译自: https://www.javacodegeeks.com/2014/09/3-examples-of-parsing-html-file-in-java-using-jsoup.html

3使用Jsoup解析Java中HTML文件的示例相关推荐

  1. java jsoup解析_3使用Jsoup解析Java中HTML文件的示例

    java jsoup解析 HTML是Web的核心,无论您是通过JavaScript,JSP,PHP,ASP或任何其他Web技术动态生成的,您在Internet上看到的所有页面都是基于HTML的. 您的 ...

  2. java语言 文件上传,java中实现文件上传的方法

    java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...

  3. java 字符串是对象吗_解析Java中的String对象的数据类型

    解析Java中的String对象的数据类型 2007-06-06 eNet&Ciweek 1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所 ...

  4. java中打开文件显示_从java程序中打开任何文件

    在 java中打开文件似乎有点棘手 – 对于.txt文件,必须将File对象与Scanner或BufferedReader对象结合使用 – 对于图像IO,必须使用 ImageIcon类 – 如果要打开 ...

  5. java中读取文件的方法

    总结一下java中读取文件的方法: 方法一(逐行的读取文件内容): private FileReader fileReader; private BufferedReader bufferedRead ...

  6. java 获取spring对象数组_解析Java中如何获取Spring中配置的bean

    解析Java中如何获取Spring中配置的bean Java中如何获取Spring中配置的bean?下面是由百分网小编为大家整理的解析Java中如何获取Spring中配置的bean,喜欢的可以收藏一下 ...

  7. 在Java中确定文件类型

    以编程方式确定文件的类型可能非常棘手,并且已经提出并实现了许多基于内容的文件标识方法. Java中有几种可用于检测文件类型的实现,其中大多数很大程度上或完全基于文件的扩展名. 这篇文章介绍了Java中 ...

  8. 服务器测试文件怎么创建,如何创建一个“FTPS”模拟服务器以单元测试Java中的文件传输...

    我有一个创建FTPS连接的CreateFTPConnection类.使用此连接传输文件.这里是TransferFile类的代码如何创建一个"FTPS"模拟服务器以单元测试Java中 ...

  9. java 获取文件扩展名_如何在Java中获取文件扩展名

    java 获取文件扩展名 Sometimes while working with files, we need to process them differently based on their ...

最新文章

  1. Java中BASE64 编码
  2. jquery $.each()函数编程实例五则图解
  3. Linux_linux常用工具------进度条程序
  4. 论文浅尝 - AAAI2020 | 多轮对话系统中的历史自适应知识融合机制
  5. 函数yield报错ValueError: too many values to unpack (expected 2)
  6. CCS软件的Graph功能
  7. jsp 弹出窗口设置大全
  8. CentOS7设置镜像源
  9. EXCEL快速合并同类项
  10. pmp知识点(12)-项目采购管理
  11. windows bat脚本教程
  12. jQuery 中ajax回调函数获得的数据格式问题
  13. 重装系统,无法进入到硬盘启动
  14. 友价商城源代码插件汇总
  15. h5中performance.timing轻松获取网页各个数据 如dom加载时间 渲染时长 加载完触发时间...
  16. 20135202闫佳歆--week 9 期中总结
  17. FAST上网设置服务器未响应,fast路由器不能上网的解决方法
  18. 【BZOJ4327】JSOI2012 玄武密码 AC自动机
  19. preg_match_all 结果排序之PREG_SET_ORDER参数
  20. 在Postgresql或GreenPlum数据库删除分区表出现问题

热门文章

  1. Spring MVC开发环境搭建
  2. rabbitmq-发布订阅模式
  3. java动态代理和cglib动态代理
  4. 二叉堆的操作总结(insert+deleteMin+increaseKey+decreaseKey+percolateDown+percolateUp)
  5. POJ3278(BFS)
  6. java web源代码_检测Java Web应用程序而无需修改其源代码
  7. kafka streams_Kafka REST Proxy MapR Streams入门
  8. java8 streams_Java SE 8新功能介绍:使用Streams API处理集合
  9. jboss项目导入idea_JBoss BPM Suite快速指南–将外部数据模型导入BPM项目
  10. 同步代码和异步代码_告别异步代码