前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jsoup解析器

Jsoup解析器

原创
作者头像
会洗碗的CV工程师
发布2024-06-29 22:49:02
1100
发布2024-06-29 22:49:02
举报
文章被收录于专栏:XML

Jsoup解析器_XML解析思想

Jsoup 是一个 Java 库,用于从 HTML(包括从 Web 服务器检索的 HTML)中解析数据,并使用 DOM、CSS 和类似于 jQuery 的方法进行操作。它提供了一种非常方便的方式来提取和操作数据,从单个的 HTML 文件到整个网站的数据。

XML解析即读写XML文档中的数据。框架的开发者通过XML解析读取框架使用者配置的参数信息,开发者也可以通过XML解析读取网络传来的数据。XML有如下解析思想:

DOM

将标记语言文档一次性加载进内存,在内存中形成一颗dom树

· 优点:操作方便,可以对文档进行CRUD的所有操作

· 缺点:占内存

SAX

逐行读取,基于事件驱动的。

· 优点:不占内存,一般用于手机APP开发中读取XML

· 缺点:只能读取,不能增删改

Jsoup解析器_XML常见解析器

· JAXP:SUN公司提供的解析器,支持DOM和SAX两种思想

· DOM4J:一款非常优秀的解析器

· Jsoup:Jsoup是一款Java的HTML解析器,支持DOM思想。可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过CSS以及类似于jQuery的操作方法来取出和操作数据

· PULL:Android操作系统内置的解析器,支持SAX思想

Jsoup解析器_Jsoup快速入门(jsoup package)(Demo1)

步骤:

  1. 导入jar包
  2. 加载XML文档进内存,获取DOM树对象Document
  3. 获取对应的标签Element对象
  4. 获取数据

首先这里准备一个student.xml文件。

代码语言:xml
复制
<?xml version="1.0" encoding="UTF-8" ?>
<body>
    <name>zhangsan</name>
    <name>lisi</name>
    <name>wangwu</name>
</body>
代码语言:java
复制
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class Demo1 {
    // 获取XML中所有学生的姓名
    public static void main(String[] args) throws IOException {
        // 2.加载XML文档进内存。获取DOM树对象Document
        // 2.1 获取类加载器
        ClassLoader classLoader = Demo1.class.getClassLoader();
        // 2.2使用类加载器,找到XML文档的路径
        String path = classLoader.getResource("com/example/xsd/student.xml").getPath();
        // 2.3加载XML文档进内存,并转成Document对象
        Document document = Jsoup.parse(new File(path), "utf-8");
        // 3.获取对应的标签Element对象
        Elements name = document.getElementsByTag("name");
        // 4.获取数据
        for (Element element : name) {
            String text = element.text();
            System.out.println(text);
        }
    }
}

运行结果如下:

Jsoup解析器_Jsoup(Demo2)

Jsoup:可以解析xml或html,形成dom树对象。

常用方法:

· static Document parse(File in, String charsetName):解析本地文件

· static Document parse(String html):解析html或xml字符串

· static Document parse(URL url, int timeoutMillis):解析网页源文

接下来解析本地的student.xml文件和https://blog.csdn.net/qq_53317005/article/details/133105261这篇文章

代码语言:java
复制
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

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

public class Demo2 {
 // Jsoup
 public static void main(String[] args) throws IOException {
  // 解析本地XML
  String path = Demo2.class.getClassLoader().getResource("com/example/xsd/student.xml").getPath();
  Document document = Jsoup.parse(new File(path), "utf-8");
  System.out.println(document);
  System.out.println("---------------------------------");
  // 解析网络资源
  Document document2 = Jsoup.parse(new URL("https://blog.csdn.net/qq_53317005/article/details/133105261"), 2000);
  System.out.println(document2);
 }
}

运行结果如下:

Jsoup解析器_Document(Demo3)(student.xml)

Document:xml的dom树对象

常用方法:

· Element getElementById(String id):根据id获取元素

· Elements getElementsByTag(String tagName):根据标签名获取元素

· Elements getElementsByAttribute(String key):根据属性获取元素

· Elements getElementsByAttributeValue(String key,String value):根据属性名=属性值获取元素。

· Elements select(Sting cssQuery):根据选择器选取元素。

先准备一个xml文件:

代码语言:xml
复制
<?xml version="1.0" encoding="UTF-8" ?>
<student>
    <body id="body">
        <name>zhangsan</name>
        <age id="aa">18</age>
        <sex class="sex">man</sex>
    </body>
    <script>
        #aa {
            age: 18;
        }
        .sex {
            sex: man;
        }
    </script>
</student>

然后尝试通过不同的方式去解析该xml文件

代码语言:java
复制
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.IOException;
public class Demo3 {
  // Document
  public static void main(String[] args) throws IOException {
    String path = Demo3.class.getClassLoader().getResource("com/example/xsd/student.xml").getPath();
    Document document = Jsoup.parse(new File(path), "utf-8");
    // 根据id获取元素
    Element body = document.getElementById("body");
    System.out.println(body);
    System.out.println("----------------------");
    // 根据标签获取元素
    Elements name = document.getElementsByTag("name");
    for (Element element : name) {
      System.out.println(element);
     }
    System.out.println("----------------------");
    // 根据属性获取元素
    Elements english = document.getElementsByAttribute("id");
    for (Element element : english) {
      System.out.println(element);
     }
    System.out.println("----------------------");
    // 根据属性名=属性值获取元素
    Elements elementsByAttributeValue = document.getElementsByAttributeValue("id", "aa");
    for (Element element : elementsByAttributeValue) {
      System.out.println(element);
     }
    System.out.println("----------------------");
    // 使用CSS选择器获取元素
    Elements select = document.select("#aa");
    System.out.println(select);
    System.out.println("----------------------");
    Elements sex = document.select("sex");
    System.out.println(sex);
    System.out.println("----------------------");
    Elements select1 = document.select(".aa");
    System.out.println(select1);
   }
}

// 根据id获取元素

// 根据标签获取元素

// 根据属性获取元素

// 根据属性名=属性值获取元素

// 使用CSS选择器获取元素

可以看得到都可以成功。

总的来说,Jsoup 是一个强大的 Java 库,用于处理 HTML 文档。它提供了多种功能,包括解析 HTML、提取数据、修改文档内容、清理用户输入的 HTML,以及发送 HTTP 请求等。以下是 Jsoup 的一些主要功能:

  1. 解析 HTML
    • 从字符串、URL、文件或输入流中解析 HTML 文档。
    • 创建一个 Document 对象,该对象表示 HTML 文档的结构,并提供了一组用于遍历和查询文档的方法。
  2. 选择元素
    • 使用类似于 CSS 或 jQuery 的选择器语法来查询和选择 HTML 元素。
    • 提供了一组方便的方法来访问元素的属性、文本内容、HTML 内容等。
  3. 提取数据
    • 从选定的元素中提取文本、属性、HTML 内容等。
    • 提供了处理表格数据(如从 <table> 标签中提取数据)的特定方法。
  4. 修改文档
    • 修改元素的内容、属性或样式。
    • 插入、删除或替换 HTML 元素。
    • 清理 HTML(例如,删除所有脚本和样式元素)。
  5. 清理用户输入
    • 提供了一种机制来清理用户提供的 HTML,以防止跨站脚本攻击(XSS)。
    • 可以配置清理器以允许或拒绝特定的 HTML 标签和属性。
  6. 发送 HTTP 请求
    • 允许你发送 GET、POST 和其他类型的 HTTP 请求到指定的 URL。
    • 可以处理 HTTP 响应,包括提取响应体中的 HTML 内容。
  7. 输出 HTML
    • 将修改后的 Document 对象转换回 HTML 字符串。
    • 提供了格式化输出的选项,以生成易于阅读的 HTML。
  8. 处理相对 URL
    • 将文档中的相对 URL 转换为绝对 URL(如果需要)。
    • 这在处理从 Web 页面中提取的链接时特别有用。
  9. 性能优化
    • 提供了用于解析和选择元素的优化选项。
    • 允许你缓存文档对象以加快后续查询的速度。
  10. 易于集成
    • 作为一个纯 Java 库,Jsoup 可以轻松集成到任何 Java 项目中。
    • 它不依赖于任何外部库或框架,因此具有较小的依赖性和较低的集成成本。

Jsoup 的这些功能使其成为处理 HTML 文档的强大工具,无论是在网络爬虫、Web 应用程序还是任何需要解析和操作 HTML 的场景中都非常有用。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Jsoup解析器_XML解析思想
    • DOM
      • SAX
      • Jsoup解析器_XML常见解析器
      • Jsoup解析器_Jsoup快速入门(jsoup package)(Demo1)
      • Jsoup解析器_Jsoup(Demo2)
      • Jsoup解析器_Document(Demo3)(student.xml)
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档