Puppeteer 使用实战:如何将自己的 CSDN 专栏文章导出并用于 Hexo 博客(三)

文章目录

  • 往期
  • 效果
  • 将文章信息导出
  • 适配 hexo 的文章模板
  • 导出的文章路径问题
  • 终端控制执行脚本
  • 代码整理
  • 结尾


往期

  • Puppeteer 使用实战:如何将自己的 CSDN 专栏文章导出并用于 Hexo 博客(二)

效果

  • 写了一个 node 脚本用来批量处理 md 文件

  • 本期用的基本上是 node

    请添加图片描述

  • 添加终端控制

    在这里插入图片描述

将文章信息导出

首先在爬取专栏页数的时候就收集好了信息,我们把信息导出到外部 json

在这里插入图片描述

然后再脚本里引入 ,就可以使用这个 json

const id2info = JSON.parse(await fs.readFileSync(`${__dirname}\\id2info.json`, "utf-8")
);

适配 hexo 的文章模板

我们可以看到 hexo 的每一个 page 是有一些配置的,我也想给导出的这些文章批量设置一下

在这里插入图片描述

观察一下导出的文件,可以得出一些规律

  • 文章开头有 @toc[] 或者 @toc[](文字),然而 hexo 并不支持,需要替换掉
  • 有些文章没有这些,就可以在内容开头直接添加即可

在这里插入图片描述
这里我是使用正则直接匹配分割

const reg = /\@\[toc\]\(.*?\)|\@\[toc\]/i;
// ....
const content = fs.readFileSync(eachArticlePath, "utf8");
/*** 拼接文章内容:文章分两种情况* - 一种是头部有 @[toc]()之类的* - 另一种是什么都没有的*/
if (content.match(reg) !== null) {const splitContent = content.split(reg)[1];afterContent = `${replaceContent}\n${splitContent}`;
} else {afterContent = `${replaceContent}\n${content}`;
}

导出的文章路径问题

通过 csdn 导出的文章,如果 title 中有一些特殊符号的,那么导出的时候会帮你替换成 _,因为 Windows 中不允许特殊字符在路径中

在这里插入图片描述
为了不改变之前的 title,我又写了一个 filePath 专门用来读文章
在这里插入图片描述

终端控制执行脚本

这里写了个终端的函数,如果选择 y,那么就执行脚本

在这里插入图片描述
需要引入 readline 以及 exec ,简单的使用逻辑可以看一下我写的:

import readline from "readline";
import { exec } from "node:child_process";
// ...
const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});
rl.question("是否立即处理成 hexo 文章? y/n:", (answer) => {if (answer === "y") {// 执行 npm run build 命令exec("modify.cmd", (err, stdout, stderr) => {if (err) {console.error(err);return;}console.log("处理完成");rl.close();});} else {rl.close();}
});

其中的 cmd 命令很简单,就是 node 脚本.js 即可运行

代码整理

花了点时间抽离了一下代码,这样入口文件更简洁了,每个功能也都独立出来,方便修改和查错,欢迎使用并 start ~代码仓库

在这里插入图片描述

结尾

基本上文章已经批量处理好了,可以放到 hexo 里生成了!

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

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

相关文章

【Java EE初阶二十四】servlet的深入理解

1. Servlet API 的学习 下面主要学习这三个类,就已经可以完成 Servlet 的大部分开发了; 1. Httpservlet 2. HttpServletRequest 3. HttpServletResponse 2. Httpservlet的学习 2.1 Httpservlet在tomcat的工作原理 写一个 Servlet 代码,往往都…

css3的var()函数

css3的var()函数 变量要以两个连字符--(横杆)(减号)为开头 变量可以在:root{}中定义, :root可以在css中创建全局样式变量。通过 :root本身写的样式,相当于 html,但优先级比后者高。 在CSS3中,var()函数是一个用于插入CSS自定义属性&#xff…

Vulhub 靶场训练 DC-6解析

一、搭建环境 kali充当攻击机 ip地址是:192.168.200.14 DC-6充当靶机 : IP地址暂时未知 注意:让两台机器的使用同一种网络适配器 二、信息收集 1、探索同网段存活的主机 ①第一种方法 arp-scan -l②第二种方法 netdiscover -i eth0 -…

npm/nodejs安装、切换源

前言 发现自己电脑上没有npm也没有node很震惊,难道我没写过代码么?不扯了,进入正题哈哈…… 安装 一般没有npm的话会报错: 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称而且报这个错,我们执行…

【骑行新纪元】社交风暴来袭,你准备加入骑友圈了吗?

当你的自行车轮轻轻滑过清晨的露水,你是否曾想与志同道合的骑友分享这一刻的喜悦?骑行,这个曾经只是简单运动的代名词,如今正在悄然转变。随着科技的进步和社交平台的发展,骑行不再只是一种健身方式,它还带…

C-指针-010

1指针 1.1语法: 【基类型*指针变量名】 【int *p&a】1.2语义: 【基类型】:指针变量指向的目标的数据类型 【*】:表示此时定义的变量是一个指针类型的变量 【&a】:一块存放着int类型数据的空间的地址 【*p】…

【高德地图】Android搭建3D高德地图详细教

📖Android搭建3D高德地图详细教程 📖第1章 高德地图介绍✅了解高德地图✅2D地图与3D地图 📖第2章 搭建3D地图并显示✅第 1 步:创建 Android 项目✅第 2 步:获取高德Key✅第 3 步:下载地图SDK✅第 4 步&…

照片上多余的人怎么处理?这几种方法让你的照片更完美!

照片怎么去掉多余人像?这是许多摄影爱好者经常遇到的问题。有时候,我们拍摄了一张非常美好的照片,但由于某些原因,照片中出现了不希望出现的人物。这时候,我们该如何处理呢?下面,我将分享几种常…

2.5网安学习第二阶段第五周回顾(个人学习记录使用)

本周重点 ①多进程和多线程 1、进程和线程 2、多线程爆破 ②Redis数据库 1、Redis的使用 2、Redis持久化 3、Redis未授权免密登录 ③嗅探和Python攻击脚本 1、嗅探(端口扫描和IP扫描) 2、SCAPY的应用 3、Python攻击脚本(SYN半连接…

计算机网络-局域网

文章目录 局域网局域网拓扑结构以太网以太网传输介质以太网时隙提高传统以太网带宽的途径以太网帧格式 局域网协议IEEE 802参考模型IEEE802.2协议LLC帧格式及其控制字段LLC提供的三种服务 IEEE 802.3协议IEEE 802.4协议IEEE 802.5协议 高速局域网100M以太网千兆以太网万兆以太网…

冲突管理最佳实践

任何团队都无法避免冲突,如何有效管理冲突,将冲突转化为团队成长和凝聚的动力,是任何一个团队管理者的必修课。原文: Best Practices for Managing Conflict in Engineering Management Obie Fernandez Unsplash 冲突在任何组织中都不可避免&…

Android中Transition过渡动画的简单使用

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一、布局xml文件代码如下&#xff1a; <?xml version"1.0" encoding&quo…

ABB触摸屏维修工控机显示屏维修CP405 A1/A0

ABB人机界面维修常见故障&#xff1a;黑屏白屏花屏&#xff0c;按触摸屏无反应或反应慢触摸不好&#xff0c;内容错乱&#xff0c;进不了系统界面&#xff0c;无背光背光暗&#xff0c;有背光无字符&#xff0c;不能通信&#xff0c;按键无无反应等均可维修。 此维修检测方法有…

英文输入法(C 语言)

题目 主管期望你来实现英文输入法单词联想功能&#xff0c;需求如下&#xff1a; 依据用户输入的单词前缀&#xff0c;从已输入的英文语句中联想出用户想输入的单词。按字典序输出联想到的单词序列&#xff0c;如果联想不到&#xff0c;请输出用户输入的单词前缀。 注意 英…

Java设计模式 | 七大原则之单一职责原则

一、单一职责原则 基本介绍 对类来说&#xff0c;一个类应该只负责一项原则&#xff0c;如类A负责两个不同职责&#xff1a;职责1&#xff0c;职责2。当职责1需求变更而改变A时&#xff0c;可能造成职责2执行错误&#xff0c;所以需要将类A的粒度分解为A1&#xff0c;A2。 注…

玩主机游戏能省去不少烦恼?+主机该购买哪台?

文/嘉兰SK 来到次世代&#xff0c;玩家们最关心的问题逐渐变成了购买的游戏能否支持升级。 各个游戏厂商也没有闲着。 此前还有标准版、黄金版、终极版、决定版等一系列。 想出很多招数。 于是很多新玩家开始疑惑&#xff1a;你们都说玩主机游戏可以省去很多麻烦&#xff0c;可…

每天一个知识点 - 如何快速熟悉后端项目

入职一家新公司的时候&#xff0c;不可避免的就是接触到新公司的项目&#xff0c;有些项目一启动就是好几年&#xff0c;业务功能极其复杂&#xff0c;下面我总结几个方法让大家快速熟悉后端项目&#xff08;图文结合&#xff09; 用例图简析 用例是系统中的一个功能单元&…

springboot网站开发02-接入持久层框架mybatisPlus

springboot网站开发02-接入持久层框架mybatisPlus&#xff01;经过上一小节内容分享&#xff0c;我们的项目嵌套模式框架搭建好了&#xff0c;下面就是开始编辑具体的业务代码了&#xff0c;我们使用到了持久层框架是mybatisPlus插件。下面是一些具体的植入框架的操作步骤。 第…

Python 光速入门课程

首先说一下&#xff0c;为啥小编在即PHP和Golang之后&#xff0c;为啥又要整Python&#xff0c;那是因为小编最近又拿起了 " 阿里天池 " 的东西&#xff0c;所以小编又不得不捡起来大概五年前学习的Python&#xff0c;本篇文章主要讲的是最基础版本&#xff0c;所以比…

DT DAY3 信号和槽

作业&#xff1a; 1> 思维导图 2> 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 btn3 new QPushButton("按钮3",this);btn3->resize(ui->btn2->width(),ui->b…