【高效开发工具系列】Java读取Html

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.基础介绍
      • 1.需求说明
      • 2.Jsoup 简介
      • 3.Jsoup 的功能
    • 二.基本使用
      • 1. 添加依赖
      • 2. 使用 Jsoup 解析 HTML 文档
      • 3.直接传入 html
      • 4.直接传入 URL

一.基础介绍

1.需求说明

有许多情况下,你可能需要使用 Java 解析 HTML。以下是一些常见的情况:

  1. 网页数据提取: 当你需要从网页中提取特定数据时,例如爬取网页内容并提取标题、链接、表格数据等。HTML 解析是必要的,因为它使你能够以结构化的方式访问和提取所需的信息。

  2. 数据清理和转换: 如果你有一些包含 HTML 标记的文本数据,你可能希望将其清理并转换为纯文本或其他格式。HTML 解析器可以帮助你处理这些标记,提取文本内容。

  3. Web 抓取和爬虫: 在开发 Web 爬虫或抓取工具时,HTML 解析是关键的。你需要解析从网页获取的 HTML 内容,从中提取有用的信息,并进行进一步的处理和存储。

  4. 数据分析: 在进行 Web 数据分析时,你可能需要解析和处理大量的 HTML 数据。这可能涉及从多个网页中提取数据,进行统计分析或生成报告。

  5. 屏幕抓取和自动化: 在自动化测试或屏幕抓取的情境中,你可能需要解析 HTML 来检查页面上的元素、属性或文本。

  6. Web 应用程序开发: 在开发 Web 应用程序时,可能需要从 HTML 表单中提取用户输入,处理提交的数据,或者在服务器端生成动态的 HTML 内容。

在这些情况下,使用 Java 中的 HTML 解析库(如 Jsoup)可以使你更方便地处理和操作 HTML 文档,从而实现你的需求。

2.Jsoup 简介

这个包是 Jsoup,是一个用于解析 HTML 文档的 Java 库。它提供了一种方便的方式来从 HTML 中提取和操作数据。

3.Jsoup 的功能

下面是一些 Jsoup 的主要功能以及一个简单的使用示例:

  1. HTML 解析: Jsoup 能够解析 HTML 文档,构建一个 Document 对象,便于进一步操作。

  2. 元素选择器: 提供类似于 CSS 选择器的语法,方便选择 HTML 文档中的特定元素。

  3. DOM 操作: 允许你在 HTML 文档中添加、修改或删除元素。

  4. 属性获取: 能够获取 HTML 元素的属性值。

  5. HTML 输出: 可以将 Document 对象输出为 HTML 字符串。

二.基本使用

1. 添加依赖

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.8.3</version>
</dependency>

2. 使用 Jsoup 解析 HTML 文档

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

public class JsoupExample {
    public static void main(String[] args) {
        try {
            // 从URL加载HTML文档
            Document document = Jsoup.connect("http://example.com").get();

            // 通过CSS选择器选择所有h1元素
            Elements headings = document.select("h1");

            // 输出所有h1元素的文本内容
            for (Element heading : headings) {
                System.out.println("Heading: " + heading.text());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述示例演示了从 URL 加载 HTML 文档,使用 CSS 选择器选择所有 h1 元素,并输出它们的文本内容。你可以根据具体需求进一步操作文档的元素,进行数据提取或修改。请注意,需要处理异常,因为 Jsoup 的方法可能会抛出 IOException 等异常。

3.直接传入 html

@SpringBootTest
@AutoConfigureMockMvc
public class HtmlTest {
    @Test
    public void testHelloEndpoint() throws Exception {
        // 获取html的文档对象
        Document doc = Jsoup.parse("<html><body><h1>Hello, world!</h1></body></html>");
        // 获取页面下id="content"的标签
        Element content = doc.getElementById("answer_54474042");
        // 获取页面下的a标签
        Elements answersMoney = content.getElementsByClass("Answers_Money");
        final String text = answersMoney.text();
        System.out.println(text);
        // 定义正则表达式,匹配小数部分
        String regex = "\\d+\\.\\d+";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);
        // 查找匹配的部分
        if (matcher.find()) {
            String result = matcher.group();
            System.out.println("提取到的数字为: " + result);
        } else {
            System.out.println("未找到匹配的数字");
        }
    }
}

4.直接传入 URL

@SpringBootTest
@AutoConfigureMockMvc
public class HtmlUrlTest {
    @Test
    public void testHelloEndpoint() throws Exception {
        // 访问 URL 并获取 HTML 内容
        Document doc = Jsoup.connect("https://ask.csdn.net/questions/8058214/54474042?username=qyj19920704").get();
        // 获取页面下id="content"的标签
        Element content = doc.getElementById("answer_54474042");
        // 获取页面下的a标签
        Elements answersMoney = content.getElementsByClass("Answers_Money");
        final String text = answersMoney.text();
        System.out.println(text);
        // 定义正则表达式,匹配小数部分
        String regex = "\\d+\\.\\d+";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);
        // 查找匹配的部分
        if (matcher.find()) {
            String result = matcher.group();
            System.out.println("提取到的数字为: " + result);
        } else {
            System.out.println("未找到匹配的数字");
        }
    }
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32 SDIO接口传输中的错误处理和中断优化技巧

在 STM32 的 SDIO 接口传输中&#xff0c;错误处理和中断优化是确保传输稳定和可靠性的重要方面。下面将介绍一些常用的错误处理和中断优化技巧&#xff0c;并给出相应的代码示例。 ✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进 ❤欢迎关注我的…

Redis 持久化详解:RDB 与 AOF 的配置、触发机制和实际测试

什么是持久化&#xff1f; 就是 Redis 将内存数据持久化到硬盘&#xff0c;避免从数据库恢复数据。之所以避免从数据库恢复数据是因为后端数据通常有性能瓶颈&#xff0c;大量数据从数据库恢复可能会给数据库造成巨大压力。 Redis 持久化通常有 RDB 和 AOF 两种方式&#xff…

VMware虚拟机部署Linux Ubuntu系统

本文介绍基于VMware Workstation Pro虚拟机软件&#xff0c;配置Linux Ubuntu操作系统环境的方法。 首先&#xff0c;我们需要进行VMware Workstation Pro虚拟机软件的下载与安装。需要注意的是&#xff0c;VMware Workstation Pro软件是一个收费软件&#xff0c;而互联网中有很…

一道CTFsql注入的问题

打开页面一个登录框&#xff0c;我甚至都没先弱口令登录&#xff0c;直接开始sql测试&#xff0c;结果测到最后发现没有&#xff0c;直接admin/admin就就去了&#xff0c;下次遇到登录框请先测试弱口令&#xff0c;ok&#xff1f; 登录成功后&#xff1a; 这句话提示中提到了…

linux(进程概念)

目录 前言&#xff1a; 正文 冯诺依曼体系结构 操作系统 &#xff08;Operator System&#xff09; 概念 目的 定位 如何理解“管理” 进程组织 基本概念 内核数据结构 代码和数据 查看进程 ps指令 top指令 父子进程 fork创建进程 小结&#xff1a; 前…

【Web】云服务器的购买与使用

目录 一、云服务器的选择 二、配置 一、云服务器的选择 腾讯云、阿里云都可以 有首次试用、学生打折啥的。 租借时间、配置都可以自行选择 二、配置 先进行重置密码、拍摄快照

HCS 华为云Stack产品组件

HCS 华为云Stack产品组件 Cloud Provisioning Service(CPS) 负责laas的云平台层的部署和升级是laas层中真正面向硬件设备&#xff0c;并将其池化软件化的部件。 Service OM 资源池(计算/存储/网络)以及基础云服务(ECS/EVS/PC)的管理工具。 ManageOne ManageOne包括服务中心…

【服务器Midjourney】创建部署Midjourney网站

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站

python tkinter 界面开发基本结构

python tkinter 界面开发基本结构 # -*- coding:utf-8 -*- import tkinter as tkroot_window tk.Tk() # 设置窗口title root_window.title(tkinter 界面开发) # 设置窗口大小:宽x高,注,此处不能为 "*",必须使用 "x" root_window.geometry(600x500) # 更改…

C++: 内联函数

目录 概念&#xff1a; 与宏的对比&#xff1a; 函数膨胀&#xff1a; 内联函数的特性&#xff1a; 概念&#xff1a; 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调 用建立栈帧的开销&#xff0c;内联函数…

Git分布式版本控制工具

1、目标 了解Git基本概念 能够概述git工作流程 能够使用Git常用命令 熟悉Git代码托管服务 能够使用idea操作git 2、概述 2.1、开发中的实际场景 场景一&#xff1a;备份 小明负责的模块就要完成了&#xff0c;就在即将Release之前的一瞬间&#xff0c;电脑突然蓝屏&…

算法基础课-数据结构

单链表 题目链接&#xff1a;826. 单链表 - AcWing题库 思路&#xff1a;AcWing 826. 单链表---图解 - AcWing 需要注意的点在于理解ne[idx] head&#xff0c;idx表示当前的点&#xff0c;意思是将当前的点链到头结点的后面&#xff0c;再将头结点链在当前idx的前面。 #inc…

2024-01-24-redis4

秒杀活动 需求&#xff1a;库存中有10件商品 商品的信息自定义 同时有100个人去抢购&#xff08;这里100个人的抢购由jmeter来模拟&#xff09; jmeter的使用 在idea中将后台代码实现 package org.aaa.controller;import org.apache.commons.lang3.StringUtils; import org.sp…

goland课程管理(6)

项目目录结构如下图所示&#xff1a; core包下面&#xff1a; class.go package coreimport "github.com/gin-gonic/gin"func Class1(ctx *gin.Context) {}course.go package coreimport (. "cookie/database". "cookie/model""fmt"…

服务端开发小记02——Maven

这里写目录标题 Maven简介Maven在Linux下的安装Maven常用命令 Maven简介 Apache Maven Project是一个apache的开源项目&#xff0c;是用于构建和管理Java项目的工具包。 用Maven可以方便地创建项目&#xff0c;基于archetype可以创建多种类型的java项目&#xff1b;Maven仓库…

华为三层交换机与防火墙对接配置上网示例

三层交换机与防火墙对接上网配置示例 组网图形 图1 三层交换机与防火墙对接上网组网图 三层交换机简介配置注意事项组网需求配置思路操作步骤配置文件 三层交换机简介 三层交换机是具有路由功能的交换机&#xff0c;由于路由属于OSI模型中第三层网络层的功能&#xff0c;所以…

VMware 虚拟机环境下的ubuntu 上安装mysql,并能远程访问数据库

需求&#xff1a;为了实现在linux上模拟服务器跑代码&#xff0c;并存储在mysql上&#xff0c;通过远程可视化mysql数据库软件查看linux上mysql数据库数据的实时动态。 1. 虚拟机和ubuntu的安装 这里我选择的是VMware workstation-v14, ubuntu-18.04.1。至于体流程网上很多&a…

基于Java的高校运动会管理系统的设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言 详细视频演示 具体实现截图 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBaitsPlus 系统测试 系统测试目的 系统功能测试 系统测试结论 代码参考 数据库参考 源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、…

Django ORM 框架中的表关系,你真的弄懂了吗?

Django ORM 框架中的表关系 前言 Django ORM 框架中的表关系 为了说清楚问题&#xff0c;我们设计一个 crm 系统&#xff0c;包含五张表&#xff1a; 1.tb_student 学生表 2.tb_student_detail 学生详情表 3.tb_salesman 课程顾问表 4.tb_course 课程表 5.tb_entry 报名表…

Vue2.0+Element实现日历组件

(壹)博主介绍 &#x1f320;个人博客&#xff1a; 尔滨三皮⌛程序寄语&#xff1a;木秀于林&#xff0c;风必摧之&#xff1b;行高于人&#xff0c;众必非之。 (贰)文章内容 1、安装依赖 npm install moment2.29.4 --savenpm install lunar0.0.3 --savenpm install lunar-java…