当前位置: 首页 > 后端技术 > Node.js

使用NodeJS解析chrome书签

时间:2023-04-03 18:33:04 Node.js

我平时在PC上积累了很多Chrome书签,一直希望能在其他地方使用,但是在导出到其他浏览器,尤其是手机浏览器时遇到了很多困难。虽然可以通过谷歌账户同步书签,但由于众所周知的原因,存在诸多不便。于是写了一个小程序,将chrome的html书签解析成json格式,方便扩展使用。具体步骤是在chrome书签管理器页面导出html格式的书签;由于导出的html格式有很多未关闭的标签,为了后续操作方便,使用chrome打开书签html文件;chrome会自动填写标签并调用开发者工具,将html复制并保存;使用NodeJS解析书签html文件。html书签完成前,书签是这样的,dt标签和p标签没有关闭

书签栏

GitHub

HTML

书签栏

GitHub

NodeJS程序使用cheerio进行dom操作,执行步骤首先,读取完成的html书签;获取最外层的dt元素,从最外层的dt元素开始遍历dom树,其中h3标签为文件夹名,A标签包含书签名、书签地址等信息;将书签和文件夹存储为对象,将同一文件夹下的书签和文件夹对象集合存储为数组;将最终对象转换成json字符串存入json文件varcheerio=require('cheerio'),fs=require('fs');//读取书签html文件fs.readFile('bookmarks.html','utf-8',function(err,data){if(err){console.log("错误");}else{解析(数据);}});functionparse(html){//加载html,使用通常的$符号var$=cheerio.load(html);//获取最外层的dt标签var$dl=$("dl").first();var$dt=$dl.children("dt").eq(0);//从dt遍历dom树,生成Objectvarobj=foo($dt);//将对象转为json字符串,添加额外参数使json格式更易读vars=JSON.stringify(obj,null,4);//将json字符串写入json文件fs.writeFileSync('output.json',s);functionfoo($dt){//h3标签是文件夹名称var$h3=$dt.children("h3");if($h3.length==0){//标签是一个URLvar$a=$dt.children("a");//返回一个由书签名称和URL组成的对象return$a.length>0?{“名称”:$a.text(),“href”:$a.attr('href')}:空;}varh3=$h3.text();变量arr=[];变量对象={};//获取下一级dt标签集var$dl=$dt.children("dl");var$dtArr=$dl.children("dt");for(vari=0;i<$dtArr.length;i++){//遍历下一层dt标签vartmp=foo($dtArr.eq(i));//将返回的对象推送到子文件数组arr.push(tmp);}//创建一个键值对的文件夹和子文件数组obj[h3]=arr;//返回对象returnobj;}}jsonfile{"书签栏":[{"name":"GitHub","href":"https://github.com/"},{"name":"RequireJS中文网","href":"http://www.requirejs.cn/home.html"},{"name":"(2条私信/99+消息)首页-知乎","href":"https://www.zhihu.com/"},{"name":"IMOOC——中国最大的IT技能学习平台","href":"http://www.imooc.com/"}]}