【实战】Java使用 Jsoup 将浏览器书签 HTML 转换为 JSON(支持多级目录)

一、背景说明

浏览器(Chrome / Edge / Firefox)导出的书签文件,通常是Netscape Bookmark HTML 格式
在实际开发中,我们可能会遇到以下需求:

  • 将浏览器书签导入到自己的系统
  • 对书签进行结构化存储(如数据库、JSON)
  • 做书签导航站、搜索、同步工具等

本文通过Jsoup + Fastjson2,演示如何将书签 HTML解析为层级 JSON 结构,并支持递归子目录


二、书签 HTML 格式说明

浏览器导出的书签文件大致结构如下:

<DL><DT><H3>文件夹</H3><DL><DT><AHREF="https://www.baidu.com/">百度</A><DT><H3>子文件夹</H3><DL><DT><AHREF="https://map.baidu.com/">百度地图</A></DL></DL></DL>

关键点:

  • <H3>:表示一个文件夹
  • <A>:表示一个书签链接
  • <DL>:表示当前文件夹的内容
  • 文件夹与其内容是H3 → 紧跟的 DL

三、技术选型

技术作用
Jsoup解析 HTML DOM
Fastjson2构建 JSON 数据
JUnit + SpringBootTest测试运行

四、完整示例代码

下面给出完整可运行代码,包括导入、类定义和递归方法:

packagecom.nav.test;importcom.alibaba.fastjson2.JSONArray;importcom.alibaba.fastjson2.JSONObject;importorg.jsoup.Jsoup;importorg.jsoup.nodes.Document;importorg.jsoup.nodes.Element;importorg.jsoup.select.Elements;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.test.context.junit4.SpringRunner;@SpringBootTest@RunWith(SpringRunner.class)publicclassBookmark{@Testpublicvoidmain(){// 模拟浏览器导出的书签 HTML 内容StringbookmarkContent="<!DOCTYPE NETSCAPE-Bookmark-file-1>\n"+"<!-- This is an automatically generated file. -->\n"+"<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">\n"+"<TITLE>Bookmarks</TITLE>\n"+"<H1>Bookmarks</H1>\n"+"<DL><p>\n"+" <DT><H3 ADD_DATE=\"1632971641\" LAST_MODIFIED=\"1689686797\" PERSONAL_TOOLBAR_FOLDER=\"true\">书签栏</H3>\n"+" <DL><p>\n"+" <DT><A HREF=\"https://www.baidu.com/\" ADD_DATE=\"1689686710\">百度一下,你就知道</A>\n"+" <DT><H3 ADD_DATE=\"1689686747\" LAST_MODIFIED=\"1689686798\">子书签</H3>\n"+" <DL><p>\n"+" <DT><A HREF=\"https://map.baidu.com/\" ADD_DATE=\"1689686769\">百度地图</A>\n"+" </DL><p>\n"+" </DL><p>\n"+"</DL><p>";// 使用 Jsoup 解析 HTMLDocumentdoc=Jsoup.parse(bookmarkContent);// 找到书签栏(Chrome 的 PERSONAL_TOOLBAR_FOLDER)ElementmainFolder=doc.select("h3[personal_toolbar_folder]").first();// 递归处理JSONObjectresult=processFolder(mainFolder);// 输出 JSONSystem.out.println(result.toJSONString());}/** * 递归处理文件夹 * * @param folderElement 文件夹对应的 H3 元素 * @return JSONObject 结构 {name, links, subFolders} */privatestaticJSONObjectprocessFolder(ElementfolderElement){JSONObjectfolderJson=newJSONObject();// 文件夹名称folderJson.put("name",folderElement.text());// 当前文件夹对应的 <DL>Elementdl=folderElement.nextElementSibling();// 当前目录下的链接JSONArraylinks=newJSONArray();for(Elementa:dl.select("> dt > a")){JSONObjectlinkJson=newJSONObject();linkJson.put("name",a.text());linkJson.put("url",a.attr("href"));links.add(linkJson);}folderJson.put("links",links);// 子文件夹JSONArraysubFolders=newJSONArray();for(Elementh3:dl.select("> dt > h3")){subFolders.add(processFolder(h3));}folderJson.put("subFolders",subFolders);returnfolderJson;}}

五、输出 JSON 示例

运行上面的代码,控制台输出类似:

{"name":"书签栏","links":[{"name":"百度一下,你就知道","url":"https://www.baidu.com/"}],"subFolders":[{"name":"子书签","links":[{"name":"百度地图","url":"https://map.baidu.com/"}],"subFolders":[]}]}

六、实现思路总结

  1. H3 表示文件夹
  2. H3 后面的 DL 是内容
  3. 使用nextElementSibling()关联目录
  4. 递归解析子文件夹
  5. 通过> dt > a> dt > h3选择器分别获取当前目录的书签和子文件夹

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

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

相关文章

2026玻璃钢喷淋塔厂家权威推荐榜单:玻璃钢脱硫吸收塔/玻璃钢脱硫净化塔/玻璃钢烟气脱硫塔/玻璃钢脱硫塔装置源头厂家精选。 - 品牌推荐官

在环保政策日益严格和工业“绿色转型”的大背景下,玻璃钢喷淋塔凭借其卓越的耐腐蚀性、轻质高强的结构特性以及出色的废气净化效能,已成为化工、电力、冶金、半导体等众多行业实现废气达标排放的核心装备。市场数据显…

SSM434数字图像处理在线考试课程教学系统vue

目录SSM434数字图像处理在线考试课程教学系统Vue摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;SSM434数字图像处理在线考试课程教学系统Vue摘要 SSM434数字图像处理在线考试课程教学系统是基于Vue.js前端框架与SSM&#…

2026安徽小红书代运营公司权威测评:避坑指南与高效选择 - 野榜数据排行

在信息爆炸的 2025 年,安徽的企业想在小红书平台突围而出,却往往陷入 “自建团队成本高昂、产出内容难获流量、后台数据看不懂摸不透” 的困境。面对市场上鱼龙混杂的服务商,到底该如何筛选出靠谱的合作伙伴?我们立…

【Puppeteer 实战】自动登录后台并分页提取表格数据(含 50 条/页切换)

本文通过一个完整示例&#xff0c;演示如何使用 Puppeteer 自动访问后台系统、设置 Cookie、切换分页大小&#xff0c;并循环点击「下一页」抓取所有表格 HTML 数据。一、应用场景说明 在实际项目中&#xff0c;我们经常遇到以下需求&#xff1a; 后台系统需要登录才能访问数据…

前端核心知识:Vue 3 编程的 10 个实用技巧

Vue 3 编程的 10 个实用技巧 &#xff08;2025-2026 年后端转前端 / 中高级开发者最常使用的写法&#xff09; 以下 10 个技巧几乎覆盖了目前绝大部分中大型 Vue 3 项目中最实用、最能提升代码质量和开发效率的部分&#xff0c;按“日常使用频率”从高到低排序。 排名技巧名称…

2026年市面上专业的换热器供应商哪家强,高大空间循环制热机组/表冷换热器/空调换热器/空调机组,换热器品牌联系电话 - 品牌推荐师

随着全球工业4.0进程加速及绿色建筑需求激增,空调换热器作为暖通系统的核心部件,其技术迭代与供应链稳定性成为行业关注的焦点。2025年数据显示,中国空调换热器市场规模突破380亿元,年复合增长率达7.2%,但市场仍存…

太古里火锅风向标:成都口碑火锅,让你舌尖狂欢!美食/特色美食/社区火锅/烧菜火锅/火锅,成都火锅品牌排行 - 品牌推荐师

成都火锅以“麻、辣、鲜、香”著称,是川派饮食文化的核心符号。2025年,随着太古里商圈成为全国游客的打卡地标,周边火锅市场竞争愈发激烈。消费者在选择时,既需考虑口味正宗性,也需关注品牌口碑、服务体验及性价比…

ssm424面向社区健康服务的医疗平台--论文

目录摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着人口老龄化和慢性病患病率的上升&#xff0c;社区健康服务在医疗卫生体系中的作用日益凸显。传统的医疗服务模式难以满足社区居民多元化、个性化的健康需求&am…

2026年压力容器法兰优选指南:这些厂家凭实力上榜,变压器法兰/非标法兰/不锈钢法兰/锻件,压力容器法兰工厂怎么选择 - 品牌推荐师

行业现状与法兰核心价值解析 压力容器法兰作为工业管道系统的关键连接部件,其质量直接影响设备运行的稳定性与安全性。当前,行业呈现技术迭代加速、定制化需求激增、环保标准趋严三大趋势。具备全品类覆盖能力、非标…

2026年电竞房家具定制厂商权威推荐榜:优选专业电竞/全屋定制/整体家居及多风格家具定制厂家 - 品牌推荐官

电竞比赛的聚光灯下,选手身下电竞椅的腰部支撑系统正在细微调整,一家为职业赛事提供近2000场支持的品牌背后,是中国定制家具产业精密而庞大的制造网络。广州简诺智能家居有限公司旗下的“简钻”品牌设计团队正在审视…

ssm428人体健康体检预约信息管理系统--论文

目录摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着社会发展和生活水平提高&#xff0c;健康体检成为人们关注自身健康状况的重要途径。传统体检预约方式存在信息管理效率低、资源分配不均、用户体验差等问题。为…

【鸿蒙小程序】| 鸿蒙系统中的元服务创新与实践

【鸿蒙小程序】鸿蒙系统中的元服务&#xff08;Meta Service&#xff09;创新与实践 &#xff08;2025-2026 最新现状与真实开发视角&#xff09; 2025 年底到 2026 年初&#xff0c;华为把“元服务”推到了一个非常关键的位置&#xff0c;它已经成为 HarmonyOS NEXT&#xff…

虾皮开店需要押金吗?要交多少押金

在虾皮&#xff08;Shopee&#xff09;开店&#xff0c;很多卖家关心的问题之一就是“要不要交押金&#xff1f;”。本文将依据虾皮官方最新规则&#xff0c;为你清晰、易懂地解答。 一、官方明确&#xff1a;开店无需押金 根据虾皮官方《卖家服务条款》和入驻政策&#xff…

零基础学AI大模型之Agent智能体

零基础学 AI 大模型之 Agent 智能体 &#xff08;2025年底&#xff5e;2026年初最适合普通人入门的完整路径&#xff09; Agent&#xff08;智能体&#xff09;是目前大模型应用里最火、最有“未来感”的方向&#xff0c;但对零基础同学来说&#xff0c;确实门槛很高。 下面是…

[python]Flask - Tracking ID的设计

本文详细介绍如何在 Flask 应用中实现请求跟踪 ID (tracking_id) 功能,包括中间件设计、日志记录、响应格式化等完整方案,帮助开发者实现请求链路追踪,提升系统可观测性。前言 在实际业务中,根据 tracking_id 追溯…

即插即用系列 | IEEE TMM 2025 SPDFusion:当语义分割成为图像融合的“导师”

论文标题&#xff1a;SPDFusion: A Semantic Prior Knowledge-Driven Method for Infrared and Visible Image Fusion 论文来源&#xff1a;IEEE Transactions on Multimedia (Vol. 27, 2025) 关键词&#xff1a;Image Fusion, Semantic Prior, Deep Learning, Task-Driven, GA…

AI的提示词专栏:小说创作 Prompt,人物设定、情节走向、对话写作

AI 提示词专栏&#xff1a;小说创作 Prompt 完整攻略 &#xff08;人物设定 情节走向 对话写作 2025-2026 最实用模板&#xff09; 以下内容专为想要用大模型&#xff08;Claude / GPT-4o / 通义千问 / DeepSeek / Gemini 等&#xff09;进行高质量小说创作的人准备&#xf…

JBoltAI AI应用中台:重塑企业智能化的统一基座与范式

在企业智能化转型进程中&#xff0c;“系统碎片化、数据孤岛、开发门槛高、能力难复用”等痛点&#xff0c;导致多数企业陷入“AI技术看得见、落地用不上”的困境。JBoltAI基于Java生态构建的AI应用中台&#xff0c;并非简单的工具集合&#xff0c;而是通过“统一基座标准化范式…

全网最全9个AI论文平台,助你轻松搞定本科生论文!

全网最全9个AI论文平台&#xff0c;助你轻松搞定本科生论文&#xff01; AI工具如何让论文写作不再难 在当前的学术环境中&#xff0c;越来越多的学生开始借助AI工具来提升论文写作的效率与质量。这些工具不仅能够帮助学生快速生成初稿、优化语言表达&#xff0c;还能有效降低A…

辽源市东丰东辽龙山西安区英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在全球化留学趋势深化的2026年,雅思成绩已成为辽源市东丰、东辽、龙山、西安区学子申请海外院校的核心竞争力,然而本地雅思培训市场却存在诸多痛点。对于广大考生而言,雅思培训选课过程中常常陷入两难:线下教育机构…