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

java jsoup解析

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文档,该文档在包含HTML表单的正文部分中包含标题标签和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()方法,用于从String,文件,基本URI,URL和InputStream中读取HTML文件。 您还可以指定字符编码以正确读取HTML文件(如果它们不是“ UTF-8”格式)。

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

JSoupl示例HTML解析 这是我们完整的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

java jsoup解析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 命令解码空格,Shell 编程:Bash空格的那点事

先了解下bash中什么时候该用空格&#xff0c;什么时候不该用。1. 等号赋值两边不能有空格2. 命令与选项之间需要空格3. 管道两边空格可有可无我们来看看常见的问题1. 赋值时等号两边或者只有左边多了空格igigentoo ~ $ var1 testbash: var1: command not foundigigentoo ~ $ e…

使用类似Lambda的语法切换为Java中的表达式

从Java 14开始&#xff0c; switch表达式具有额外的Lambda式 &#xff08; case ... -> labels &#xff09;语法&#xff0c;它不仅可以用作语句&#xff0c;还可以用作计算为单个值的表达式。 使用新的类似Lambda的语法&#xff0c;如果标签匹配&#xff0c;则仅执行箭头…

配置linux系统ip,Linux系统IP地址配置

命令临时配置ifconfig [Network card name] 10.50.6.16 netmask 255.255.254.0或者ip addr add 10.50.6.200/23 dev [Network card name]router add default gw 10.50.6.1 #添加默认路由重启后失效ip addr add命令添加的IP地址需要使用 ip a show [Network card name]命令查看例…

【AI提示词艺术】第12期 摄影艺术构图处理和人像生成的技巧

摄影艺术构图 星空宇宙 关键词&#xff1a; 强烈的明暗对比,8k,精细的描述,相片纸,超高分辨率,无建筑的,大自然,星空&#xff0c;云朵&#xff0c;刺眼流星&#xff0c;群星&#xff0c;银河&#xff0c;仰视视角&#xff0c;广角镜头 以下是按照提示词类别整理的相关描述&a…

超音速亚原子Enterprise Java

我创建了一个视频&#xff0c;其中用Quarkus&#xff08;用于现代Java应用程序的运行时&#xff09;解释“超音速亚原子Java”。 无论您是刚开始涉足Enterprise Java领域&#xff0c;还是已经是一位经验丰富的Java EE / J2EE开发人员&#xff0c;本课程都将指导您如何在2020年构…

linux 打包排除多个目录,tar打包整个目录(可排除子目录)几种方法

例1。压缩并打包目录tar -czf small.tar.gz small(目录名) ;例2。tar zcvf backup.tar.gz site/* –excludesite/attach –excludesite/images简单解释一下&#xff1a;ls -l | grep “^-” 用来把当前目录下所有文件列出来&#xff0c;不包括子目录&#xff1b;awk ‘{print …

Kogito,ergo规则:从知识到服务,轻松自如

欢迎阅读有关Kogito倡议的博客系列的另一集&#xff0c;以及我们将Drools带入云的努力。 这些文章的目的是收集用户对我们提供给Kogito的功能的早期反馈。 在本文中&#xff0c;我们介绍了两种实现完整智能服务的新方法 &#xff1a; 独立的规则服务 集成智能工作流程和规则…

linux系统io查看计算,Linux下查看进程IO工具iopp

Linux下的IO检测工具最常用的是iostat&#xff0c;不过iostat只能查看到总的IO情况。如果要细看具体那一个程序点用的IO较高&#xff0c;可以使用iotop 。不过iotop对内核版本和Python版本有要求&#xff0c;虽然目前主流的CentOS和Ubuntu版本上都适用。不过考虑到其无法适用的…

java 并发锁_Java并发教程–锁定:内在锁

java 并发锁在之前的文章中&#xff0c;我们回顾了在不同线程之间共享数据的一些主要风险&#xff08;例如原子性和可见性 &#xff09;以及如何设计类以安全地共享&#xff08; 线程安全的设计 &#xff09;。 但是&#xff0c;在许多情况下&#xff0c;我们将需要共享可变数据…

linux 命令 ppt,Linux基本命令()讲解.ppt

第2章 Linux 基本命令 2.1 系统管理命令 在 Linux/UNIX 操作系统中&#xff0c;所有事物都被当作文件来处理&#xff1a;硬件设备(包括键盘和终端)、目录、命令本身&#xff0c;当然还有文件。 实际上是 Linux/UNIX 的能力和灵活性的基础。Linux操作系统命令分为文件管理、文件…

Java14:使用Java 14的新记录联接数据库表

您是否知道可以使用Java 14的预览记录功能将数据库表连接到Java Stream中&#xff1f; 阅读这篇简短的文章&#xff0c;并了解如何使用Speedment Stream ORM完成它。 我们将从如何设置您的项目开始。 设定 下载Java 14 。 转到Speedment Initializer并下载您的项目骨架&#x…

linux 读取内存颗粒,Linux虚拟内存地址转化成物理内存地址

背景现代手机这种SOC(system on chip)&#xff0c;因为功耗、Modem等功能soc上集成了很多core,他们还可以是独立的系统在运转。比如ADSP简介ADSP(Application Digital Signal Processing)就是高通的Hexagon DSP ,就是独立运转的一个coresystem。这样做不仅可以使用soc上的专用核…

primefaces_PrimeFaces扩展中的全新JSF组件

primefacesPrimeFaces扩展团队很高兴宣布即将推出的3.0.0主要版本的几个新组件。 我们的新提交者Francesco Strazzullo为该项目提供了“ Turbo Boost”&#xff0c;并带来了至少6个已成功集成的 JSF组件&#xff01; 当前的开发状态是OpenShift上的deployet – 请查看展示柜。以…

linux数字设定法设定权限,Linux chmod命令详解和使用实例(改变文件或目录的访问权限)...

Linux系统中的每个文件和目录都有访问许可权限&#xff0c;用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为只读&#xff0c;只写和可执行三种。以文件为例&#xff0c;只读权限表示只允许读其内容&#xff0c;而禁止对其做任何的更改操作。…

Java 8 Stream中间操作(方法)示例

Java 8 Streams中间操作的完整指南。 所有内置Stream API中间操作&#xff08;方法&#xff09;的列表以及示例。 1.概述 在本教程中&#xff0c;我们将学习什么是 Java 8 Stream 中的中间操作 。 所有这些操作都在java.util.stream.Stream包中 。 在上一教程中&#xff0c;我…

linux服务 运维案例,linux运维实战练习案例-2015年12月20日-12月31日

1、创建一个10G的文件系统&#xff0c;类型为ext4&#xff0c;要求开机可自动挂载至单独数据/data目录&#xff1b;[[email protected] /]# cat /proc/partitionsmajor minor #blocks name8 0 52428800 sda8 1 204800 sda18 2 4096000 sda28 …

使用Quarkus调试容器中的系统测试(视频)

如果您能够借助容器在本地进行端到端测试应用程序&#xff0c;则可以提高开发效率。 在下面的视频中&#xff0c;我将展示如何使用Quarkus在Docker容器中调试本地系统测试。 这是我关于有效测试的视频课程的Quarkus扩展。 要了解全部情况&#xff0c;还可以查看以下资源&…

linux中memcpy实现分析,ARM64 的 memcpy 优化与实现

如何优化 memcpy 函数Linux 内核用到了许多方式来加强性能以及稳定性&#xff0c;本文探讨的 memcpy 的汇编实现方式就是其中的一种&#xff0c;memcpy 的性能是否强大&#xff0c;拷贝延迟是否足够低都直接影响着整个系统性能。通过对拷贝函数的理解可以加深对整个系统设计的一…

ejb生命周期_EJB 3.x:生命周期和并发模型(第2部分)

ejb生命周期这是两部分系列的第二篇。 第一部分介绍了有状态和无状态EJB的生命周期以及并发行为。 我将在本文中介绍Singleton EJB 。 Singleton模式可以说是最常用&#xff08;有时被滥用&#xff01;&#xff09;的模式。 单吨又爱它&#xff01; Java EE使我们无需编写显…

linux修改文件没有备份文件,linux文件或目录权限修改后如何恢复(备份了权限就能恢复)...

操作系统 RHEL5如果你在linux上执行了如下操作chmod -R 777 / 或者 chmod -R 700 /那么恭喜你&#xff0c;你的系统即将崩溃&#xff0c;重启之后&#xff0c;你进不了图形界面&#xff0c;而且很多服务都起不来为什么呢&#xff1f;因为linux中&#xff0c;系统的有些文件和目…