一、缘由
在我的职业生涯中,陈皓先生的技术博客------酷壳网(coolshell.cn)给予了我极大的帮助,该博客的一些技术文章,对我个人成长产生了深远的影响。2023年,我还在极客时间订阅了左耳听风专栏,系统地学习了耗子大神的知识。然而,天妒英才,耗子大神在2023年5月13日不幸离世,我们永远怀念他。
考虑到酷壳网(coolshell.cn)托管于外网,在国内访问速度较慢,用户体验不尽如人意。此外,我担心如果域名或主机未能及时续费,这个宝贵的博客资源可能会无法访问。因此,我决定爬取酷壳网的全部内容,并使用 Hexo 工具重新搭建了一个镜像站点,以保留这些珍贵的技术资料。
大家可以下先看看镜像站实现后的效果:jhlxge.gitee.io/coolshell-m...,感兴趣的话,再进一步了解我是怎么实现的。
二、实现
整体方案上我用到了如下工具:
- magic-api:一款基于 Java 的快速开发框架,使用类 JS 语法实现业务开发,官网地址:www.ssssssss.org/magic-api/
- jsoup:一款 Java 的 HTML 解析器,在 html 解析处理领域堪称 Java 界的 jQuery。官网地址:jsoup.org/
- Hutool:一个小而全的 Java 工具类库。官网为:www.hutool.cn/
- Hexo:基于 Node.js 的SSG(Static Site Generation)工具,有丰富的主题,可定制性强。官网地址:hexo.io/zh-cn/
- Butterfly主题:一款开箱即用的漂亮的 Hexo 主题,官网为:butterfly.js.org/
2.1、整站数据爬取
该步骤主要做了如下事项:
- 爬取列表页,酷壳网首页按分页的方式展示了整站所有的内容,所以我们就根据分页规则将所有列表页的 HTML 都爬取过来即可。
- 获取所有的文章页,有了列表页 HTML 后,我们可以解析出所有内容页的 URL,然后根据 URL 获取每篇文章的 HTML
- 通过文章 HTML 解析出文章的元数据(标题、正文、浏览次数、发布时间、评论次数、作者、Tag词)。
- 解析正文中的图片并下载到本地,并替换文章内容 HTML 中的图片路径
相关事项在 magic-api 中,根据步骤分别定义了不同的接口来做相关的操作:
2.2、镜像站制作
由于本机已安装了Node.js,本处略过Node.js 的安装相关的说明。
2.2.1、初始化工程:根据 Hexo
官网的开始使用文档,我们主要用到了如下两条命令:
csharp
# 安装依赖
npm install -g hexo-cli
# 初始化工程
hexo init coolshell-mirror
2.2.2、整合 hexo-theme-butterfly 主题:根据 Hexo 主题文档的说明,将 github.com/jerryc127/h... 的内容 clone 到工程的 themes 目录。
2.2.3、将爬取的内容,按 Hexo 博客的格式导出到指定目录。在执行该操作的时候,我先对 Hexo 的博客做了些了解及验证,Hexo 使用 Markdown 组织博客内容,将 Markdown 统一放到 source/_posts 目录即可。
然后我们依然使用 magic-api 导出我们需要的 Markdown。
2.3、镜像站发布到 Gitee Pages
有了博客内容后,我们可以使用 hexo generate 的生成静态化的整站内容,有了静态化的内容后,理论上我们可以部署到任意支持静态托管的服务器(如使用Github Pages 发布 或 Nginx 发布等),为了减少不必要的成本开支,也为了能满足国内快速访问的需求,我最终选择了将镜像站的内容托管到 Gitee Pages,这是 Gitee 自带的服务:
由于 Gitee Pages 直接支持Jekyll、Hugo、Hexo 等SSG工具,我们只用更新好博客内容,可以基于 Gitee Pages 自带的构建机制实现工程的打包部署。
后记
整个镜像站源码已上传到 Gitee 开源仓库:gitee.com/Jhlxge/cool...
本处主要讲解整体思路,对相关技术细节感兴趣的朋友可到我的个人博客做深入了解:
第一次在掘金做技术分享,若有不同的想法,欢迎大家多多交流。