Node实现CSDN博客导出(后续)

news/2025/1/15 15:13:32/

前言

在2021年我实现了一个Node导出博客的功能:爬取接口及博客页面并导出为md文件格式。中途有许多迭代及优化以及解决了一些关键问题,写篇文章做个记录和review

博客更新功能

在原有的导出功能上增加了博客更新的功能,避免了每次都全部导出,是否消耗时间。在命令中新增-update命令进行升级操作,如使用node server -type:csdn -id:time_____ -update
更新时会对比博客名称是否存在,如果没有则会单独导出这篇文章。核心代码是

  startLoadBlogItem: async () => {const newData = getBlogConfig().blogList;let temp = newData;console.log(`获取列表成功,共${newData.length}篇文章`);if (global.update) {const oldData = (await readFile(global.type, "./temp/")).toString("utf-8");// temp表示待导出的博客列表temp = getArrayAddItems(stringToJson(oldData) ?? [], newData);console.log(`本次更新${temp.length}篇文章`);}writeFile(global.type, JSON.stringify(newData), "./temp/");return messageCenter.emit("getBlogInfo", temp);},

以及下面的更新数据操作,我的做法是在根目录新增了一个文章缓存的temp目录,第一次加载时会将文章列表存在文件中,后续update时只需对比一下列表长度并截取新增的文章列表即可

// 获取数组更新项
function getArrayAddItems(oldList = [], newList = [], key = "title") {return newList.filter((it) => !!!oldList.find((i) => i[key] === it[key]));
}

具体改动见:博客更新

同时,我们可以在Jenkins中修改一下pipeline,以及使用构建触发器通过定时自动触发,这样就可以每天自动更新博客了

图片防盗链

由于爬取博客使用的是原图片,一般图片都会使用图片防盗链防止异常请求,如果使用非法Referer访问对方的资源就会抛错

如果使用浏览器打开就正常此时就来到了第二个优化点:反代,使用replace替换原有的img地址到我的本地nginx服务器上,下面是代码中的修改点

// 替换图片地址,拿nginx做个代理
function replaceImgUrl(content) {const { imgUrl, imgProxyUrl } = getBlogConfig();const rule = new RegExp(`(${imgUrl})`, "g");return content.replace(rule, imgProxyUrl);
}

以及commit

参照之前的文章:Nginx常用指令,基本配置,反向代理_DieHunter1024的博客-CSDN博客

我们在自己nginx的服务器中新建一个路由,配置反代,使访问/csdnImg/的请求都代理到图片的路径中

        location /csdnImg/ {proxy_pass https://img-blog.csdnimg.cn/;}

然而使用了之后依旧是403

由于HTTP Referer防盗链的校验,我们需要在nginx中增加Referer伪装绕过校验,此外,我们可以增加User-Agent伪装隐藏真实身份、绕过一些限制,伪装成浏览器防止封禁

        location /csdnImg/ {proxy_pass https://img-blog.csdnimg.cn/;proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36";proxy_set_header Referer "http://blog.csdn.net/";}

以上就是文章的全部内容,希望能帮助你

源码地址:blog_website: 基于 node 编写的CSDN博客导出的爬虫脚本+hexo部署


http://www.ppmy.cn/news/52335.html

相关文章

Raft 共识算法1-Raft基础

Raft 共识算法1-Raft基础 Raft算法中译版地址:http://www.redisant.cn/etcd/contact 英原论文地址:https://raft.github.io/raft.pdf Etcd Assistant 是一款 etcd 可视化管理软件,便捷高效地操作您的 etcd 集群;支持多种键的视图&…

数字未来:世界正走向新的“破茧时刻”

著名科学史专家亚历山大柯瓦雷,在《从封闭世界到无限宇宙》展示了一段非常神奇的历史现象:人类从笃信自己生活在一个封闭空间,到认识浩瀚无垠的宇宙,其实并没有耗费很长时间。自1543年哥白尼发布《天体运行论》,到牛顿…

基于PWM技术的三相光伏逆变器研究(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

5年了,终于入职阿里测试岗位,直接涨薪30K...

前言 本科毕业后就一直从事软件测试的工作,和多数人一样,最开始从事功能测试的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态。 一年半后开始沪漂生活,又摸爬滚打了…

【Golang开发入门】你真的会用Go写“Hello world“吗?

博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。博主主页: 是瑶瑶子啦所属专栏: Go语言核心编程近期目标:写好专栏的每一篇文章 目录 一、Go项…

C/C++占位符,%x和%p的区别

遇到的问题 今天遇到了一个很奇怪的问题&#xff0c;当使用malloc分配了一个堆空间后&#xff0c;分别尝试用cout和printf尝试打印该地址&#xff0c;出现了两个地址不一样的情况&#xff1a; int *pp (int*)malloc(10*sizeof(int)); *pp 1234; cout << pp << …

solidworks2022 - 双开

文章目录 solidworks2022 - 双开概述实验END solidworks2022 - 双开 概述 如果要参照一份设计文件, 画自己的设计. solidworks双开就有点刚需的意思了. 如果只是双击打开参考设计和自己的现有工程, 只能在一个solidworks中同时打开2份工程. 虽然可以跨区显示, 但是一份设计进…

Web 攻防之业务安全:接口未授权访问/调用测试(敏感信息泄露)

Web 攻防之业务安全&#xff1a;接口未授权访问/调用测试 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台&#xff08;操作系统、数据库&#xff0c;中间件等&#xff09;、业务系统自身&#xff08;软件或设备&#xff09;、业…