浏览器书签bookmark转json格式

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 一直使用谷歌浏览器,因为某些原因登录谷歌账号不方便,所以公司和家里的浏览器上收藏的好多书签也不能同步,以前都是直接导出来,然后自己手动导入同步

一直使用谷歌浏览器,因为某些原因登录谷歌账号不方便,所以公司和家里的浏览器上收藏的好多书签也不能同步,以前都是直接导出来,然后自己手动导入同步。

最近打算把所有书签整理下放到自己的 blog 上维护,blog 是用 vuepress2 搭建的,里面的 markdown 页面本身也是可以直接写 html 标签的。原以为直接导出的 bookmark.html 文件直接粘贴到 md 中就能用的,还是 to young to simple,倒出来的 html 文件长这样:
1.png

和我们正常的 html 页面不太一样,所有标签名和属性名全部大写了,DT、P标签都没有结束标签,即未严格标签嵌套,直接放到 vuepress 的 md 中运行和打包都会报错的。

自己手动替换修改

首先想到的当然是看能不能直接简单修改下能解决,直接全局替换和修改下标签确实可以,直接用 vscode 全局替换下就行:

    1. 删掉第一个 DL 标签前面的代码
    1. 全局删掉所有开始 P 标签
    1. H3 和 A 结束标签末尾加上 DT 结束标签
    1. 如果报错:Unexpected EOF in tag...删掉报错标签上除了常规属性,如 href 属性之外的其他属性
    1. DL、DT、H3、A 标签全部替换成小写,否则 build 时会报错:TypeError: Invalid value used as weak map key

借助浏览器解析标签

借助 input 的 file 属性可以在浏览器中加载出来 bookmark.html 的文件 File 信息,也就跟我们平时实现的上传选择文件功能一样。

File 接口继承了 Blob 的方法和属性,里面有一个 text 方法,Blob.text() 方法返回一个 Promise 对象,包含 blob 中的内容,使用 UTF-8 格式编码。和 FileReader 的 readAsText() 有点类似,我们可以借助这个方法把文件里面的信息转成文本。
2.png

注意 File 对象中只存在于浏览器环境中,在 node 环境中米有,不过在 node 中我们可以直接用 fs.readFile 来读取文件内容。

思路:

    1. 先通过 File 对象读取 bookmark.html 成字符串文本
    1. 然后再将文本直接借助浏览器的 DOM 节点的 innerHTML 渲染成 html 标签,这一步浏览器会自动帮我们转成节点列表 NodeList,也不需要我们自己在额外处理标签未严格嵌套的问题
    1. 然后就可以直接遍历 NodeList 来格式化我们想要的数据了,注意书签数据在最外层的 dl 节点下
      3.png

注意
生成 markdown 文件时,超链接的文字内容里带标签的话,vuepress build 编译时会报错:Compiling with vite[vite:vue] Element is missing end tag,解决方式将标签的尖括号去掉:

<!-- 错误方式 -->
[HTML的<pre>标签中嵌套HTML标签时被解析的解决方案](http://xxx.com)

<!-- 正确方式 -->
[HTML的pre标签中嵌套HTML标签时被解析的解决方案](http://xxx.com)

nodejs 版本

大题思路其实和浏览器版本一样,只不过解析 dom 节点我们需要借助第三方 dom 库,如 htmlparser2

系统自动生成的书签json文件

Chrome 浏览器其实有自动生成的json文件,具体位置:

  • windows 系统 C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Bookmarks
  • mac 系统 /Users/${一般是你的电脑账号名}/Library/Application Support/Google/Chrome/Default/Bookmarks

也可以直接在谷歌浏览器地址栏输入 chrome://version,会自动加载出有关谷歌浏览器的各种信息。

目录
相关文章
|
1月前
|
算法 开发者
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
35 1
|
1月前
|
JSON JavaScript Java
对比JSON和Hessian2的序列化格式
通过以上对比分析,希望能够帮助开发者在不同场景下选择最适合的序列化格式,提高系统的整体性能和可维护性。
43 3
|
1月前
|
Web App开发 Linux iOS开发
Chrome浏览器如何导出所有书签并导入书签
【11月更文挑战第4天】本文介绍了如何在 Chrome 浏览器中导出和导入书签。导出时,打开书签管理器,点击“整理”按钮选择“导出书签”,保存为 HTML 文件。导入时,同样打开书签管理器,点击“整理”按钮选择“导入书签”,选择之前导出的 HTML 文件即可。其他主流浏览器也支持导入这种格式的书签文件。
172 2
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
JSON Java 数据格式
springboot中表字段映射中设置JSON格式字段映射
springboot中表字段映射中设置JSON格式字段映射
125 1
|
1月前
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
|
1月前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
2月前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
130 2
|
2月前
|
JSON API 数据格式
商品详情数据JSON格式示例参考(api接口)
JSON数据格式的商品详情数据通常包含商品的多个层级信息,以下是一个综合多个来源信息的JSON数据格式的商品详情数据示例参考:
|
2月前
|
机器学习/深度学习 JSON JavaScript
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
38 0