[开源] 分享导出博客园文章成本地 Markdown 文件存储的工具
时间:2022-05-07
本文章向大家介绍[开源] 分享导出博客园文章成本地 Markdown 文件存储的工具,主要内容包括文章目录、1. 支持的功能、2. 基本原理、3. 几个知识点、注意 Mac 和 Windows 以及 Linux 下的换行的区别、文章分类、tag 的获取、文章中图片保存、4. 项目开源下载、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
此文主要分享了如何将自己博客园的文章自动导出到 Markdown 文档进行存储,以便在本地进行归档管理,程序中也对文章的分类、tag、代码块以及文章中的图片进行了保存处理,以便上传到自己的图。 整理后的 Markdown 可以在本地整理成册或者发布到自己的个人博客上,比如我使用 Markdown 书写的 个人博客 。
文章目录
- 支持的功能
- 基本原理
- 几个知识点
- 将 HTML 转换成 Markdown
- 注意 Mac 和 Windows 以及 Linux 下的换行的区别
- 文章分类、tag 的获取
- 文章中图片保存
- 项目开源下载
1. 支持的功能
- 可以循环抓取自己博客园的所有文章导出到 Markdown 文件进行保存;
- 在 Markdown 的头部保存了原文章的标题、发表时间、文章分类、文章 tag 元素;
- 文章中的代码块会抽取出来包含在
codeblock
中,你也可以修改源码保存成其他的格式块; - 保存的文件名就是原文章的路径,如果你的文章都设置了
EntryName
,那生成的文件名就会非常的友好; - 文章中的图片可选进行本地保存,命名的格式为源文件名,并可在原文中将链接进行图床前缀的替换,你可以修改源码按照自己的格式进行保存。
抓取保存后文件预览。
2. 基本原理
- 循环抓取博客的列表,获取到文章的链接;
- 循环文章的链接,进行抓取,提取元素;
- 保存抓取到的元素进行格式化并保存。
3. 几个知识点
将 HTML 转换成 Markdown
这里使用了一个开源的组件 Html2Markdown ,在控制台安装组件后就可以使用了,主要支持两个方法。 对字符串进行转换
var html = "Something to <strong>convert</strong>";var converter = new Converter();var markdown = converter.Convert(html);
对文件进行转换
var path = "file.html";var converter = new Converter();var markdown = converter.ConvertFile(path);
注意 Mac 和 Windows 以及 Linux 下的换行的区别
具体的区别可以看这里,可以根据自己的情况对源码进行修改。
unix、windows、mac 的换行习惯
unix / linux:用 LF (n) 表示一行结束。
mac:用 CR (r) 表示一行结束。
windows:用 CR LF (rn) 和起来表示一行结束。
文章分类、tag 的获取
分析后发现通过模拟请求 API 获取即可,需要的参数通过正则匹配获取,返回数据为 Unicode 进行转码提取。
文章中图片保存
你可以修改源码开启或关闭此功能,使用文章中文件名作为保存到本地的文件名,并将文章中的图片前缀进行了替换,你可以替换成你自己新的图床地址。输出的图片文件在程序启动的 images
文件夹。
4. 项目开源下载
项目源代码在 GitHub 需要注意的问题是,项目中可能因为新旧文章中某些格式的变化导致抓取出来的 Markdown 格式可能稍有偏差,以及图片、代码块的处理,你需要去根据自己的博客去进行对应的调整后使用。
- 【专知-PyTorch手把手深度学习教程02】CNN快速理解与PyTorch实现: 图文+代码
- [接口测试 - 基础篇] 03 unittest测试框架了解多少才够?
- 关关的刷题日记09——Leetcode 80. Remove Duplicates from Sorted Array II
- [linux][kernel]dump kmsg到文件系统中
- [接口测试 - 基础篇] 12 还是要掌握python日志管理模块的
- Spring整合Quartz分布式调度
- [接口测试 - 基础篇] 11 掌握下python解析YAML格式也是需要的
- 如何用Python创建眼下火爆的区块链?这篇干货请收藏
- [接口测试 - 基础篇] 10 别啊,还有INI格式呢,别忘记我
- [接口测试 - 基础篇] 09 其实吧,读写csv格式也是要掌握的
- 【源码分享】机器学习之Python支持向量机
- [接口测试 - 基础篇] 08 封装个基本的excel解析类
- 关关的刷题日记10——Leetcode 1. Two Sum 方法1
- BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Day61:序列化二叉树
- 如何发一条九宫格图片的朋友圈
- 神器!人工智能分离歌曲中的人声和背景音乐
- Python自学成才之路 分布式计算解决方案actor
- MySQL代码开发和调试利器CLion
- 重磅!GitHub 推出容器镜像仓库服务!
- 深入理解 Cilium 的 eBPF 收发包路径
- CentOS7下搭建Jellyfin个人流媒体服务器
- CentOS8下yum源配置及nmcli命令简单介绍
- Day62:二叉搜索树的第k个结点
- CentOS7下利用SRS搭建直播流媒体服务器
- 第9天:NLP补充——需要的基本知识
- 6.AVCodecContext和AVCodec
- WebAssembly之使用JS调用C/C++接口
- WebAssembly之emcc编译命令