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中调用适当的方法来获取所需的数据。

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

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

  1. 解析:如何在 ASP.NET 中下载文件

    解析:如何在 ASP.NET 中下载文件 来源:博客园 作者:dotnetWalker 这是笔者常被问到的一个问题,如何通过ASP.NET来下载文件,这个问题可大可小,我们先从小的开始.当我们要让用户 ...

  2. 3使用Jsoup解析Java中HTML文件的示例

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

  3. java 编译时找不到同一包中的文件_Java基础笔试练习(七)

    Java基础笔试练习(七) 1.下列程序执行后结果为( )? class A { public int func1(int a, int b) { return a - b; }}class B ex ...

  4. 容器安装java_在docker容器中安装Java(从宿主机向docker容器中拷贝文件)

    操作系统 [root@Optimus /]# uname -a Linux Optimus 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2 ...

  5. java显示艺术字_Java 在Word文档中添加艺术字的示例

    与普通文字相比,艺术字更加美观有趣也更具有辨识度,常见于一些设计精美的杂志或宣传海报中.我们在日常工作中编辑Word文档时,也可以通过添加艺术字体来凸显文章的重点,美化页面排版.这篇文章将介绍如何使用 ...

  6. java循环链表类_3、循环链表(java实现)

    public class CircularLink{private static Node head = null;/*** 初始化*/ public voidinitCircularLink() { ...

  7. java实现poi导入excel_Java POI实现将导入Excel文件的示例代码

    问题描述 现需要批量导入数据,数据以Excel形式导入. POI介绍 我选择使用的是apache POI.这是有Apache软件基金会开放的函数库,他会提供API给java,使其可以对office文件 ...

  8. java删除某些段落word_Java 批量删除Word中的空白段落示例代码

    1. 测试文档.期望达到的目标文档效果 用于测试的Word文档如下所示,包含的空白段落影响文章整体布局及美观性: 目标文档效果: 2. 辅助工具 2.1 使用类库:Free Spire.Doc for ...

  9. java调用下载窗口_java 从网络Url中下载文件 java调用url接口

    /** * 从网络Url中下载文件 * @param urlStr * @param fileName * @param savePath * @throws IOException */ publi ...

最新文章

  1. 动手使用ABAP Channel开发一些小工具,提升日常工作效率
  2. Java 8 的 JVM 有多快?Fork-Join 性能基准测试
  3. 浅谈前端实现页面加载进度条以及 nprogress.js 的实现
  4. mysql命令导入导出数据库_MYSQL命令行导入导出数据库详解
  5. 在错误的数据上,刷到 SOTA 又有什么意义?
  6. php phar包require报错,php,_很奇怪,php 引入了phar,但是报错,说Predis\Client类找不到?,php - phpStudy...
  7. 设计模式---观察者模式介绍与理解
  8. 前端怎样让图片缩小像素值不失真_纹理优化:不仅仅是一张图片那么简单
  9. 【不建议阅读】电脑上腾讯会议录屏:OBS
  10. 51nod 1605:棋盘问题
  11. 【计蒜客习题】蒜头君运送宝藏
  12. git学习笔记-(8-高层命令(2))
  13. 示波器上1G/S 100MHZ的含义
  14. Backspace删除键不能够使用的解决办法
  15. 计算机需要记笔记,如何优雅地用电脑记笔记
  16. 如何做好团队测试建设
  17. 魔百和CM311-1a_CH_S905L3A_安卓9.0_纯净线刷固件包
  18. mysql qc_qc-mysql
  19. 2022武汉软件著作权申请流程
  20. 手机移动视频监控系统方案

热门文章

  1. P1943-LocalMaxima_NOI导刊2009提高(1)【数论】
  2. jzoj3382-七夕祭【贪心,中位数】
  3. 【2018.3.31】模拟赛之二-ssl2407 负进制【贪心】
  4. CDQ 分治与整体二分
  5. 【DP】划分数列(ybtoj DP-2-1)
  6. 操作系统复习笔记 02-03 OS Structure 操作系统结构
  7. 案例分析 | 由Decimal操作计算引发的Spark数据丢失问题
  8. 汇编语言(二十六)之自然数求和
  9. Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
  10. 认识JVM--第一篇-对象分配&回收算法