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

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

前言

在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);
}


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

        location /csdnImg/ {
            proxy_pass https://ucc.alicdn.com/images/user-upload-01/;
        }

然而使用了之后依旧是403

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

        location /csdnImg/ {
            proxy_pass https://ucc.alicdn.com/images/user-upload-01/;
            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/";
        }

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

相关文章
|
5月前
|
Web App开发 存储 JavaScript
基于Node.js的简易博客系统设计与实现
基于Node.js的简易博客系统设计与实现
117 3
|
5月前
|
JavaScript
细讲Node.js模块化,以及 CommonJS 标准语法导出和导入,详细简单易懂!
细讲Node.js模块化,以及 CommonJS 标准语法导出和导入,详细简单易懂!
|
5月前
|
前端开发
【Node】一键生成博客标题图片
还在为写文章时找不到标题图片而困扰吗?举个例子,CSDN的博客文章如果你不给他图片的话,那么它会按照一些默认的标签图片作为你的文章封面,例如下面这样。
52 7
|
前端开发 NoSQL JavaScript
node-blog:用 node 搭建的个人开源博客
node-blog:用 node 搭建的个人开源博客
91 0
|
NoSQL JavaScript 前端开发
【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)
【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)
227 0
|
JavaScript 前端开发 NoSQL
【Node.js实战】一文带你开发博客项目之初识Koa2(koa2安装使用、搭建开发环境、测试路由)
【Node.js实战】一文带你开发博客项目之初识Koa2(koa2安装使用、搭建开发环境、测试路由)
413 0
|
JavaScript NoSQL 中间件
【Node.js实战】一文带你开发博客项目之Express重构(博客的增删查改、morgan写日志)
【Node.js实战】一文带你开发博客项目之Express重构(博客的增删查改、morgan写日志)
143 0
|
存储 NoSQL JavaScript
【Node.js实战】一文带你开发博客项目之Express重构(初始化环境,处理 session,连接 redis)
【Node.js实战】一文带你开发博客项目之Express重构(初始化环境,处理 session,连接 redis)
183 0
|
JavaScript NoSQL 中间件
【Node.js实战】一文带你开发博客项目之初识Express(安装Express,处理路由,中间件机制)
【Node.js实战】一文带你开发博客项目之初识Express(安装Express,处理路由,中间件机制)
122 0
下一篇
无影云桌面