酷壳(coolshell.cn)镜像站建设经验分享之一——准备工作

酷壳(coolshell.cn)镜像站建设经验分享之一——准备工作

朱治龙
2024-02-25 / 0 评论 / 66 阅读 / 正在检测是否收录...

本系列文章生成的镜像站已上传到 Gitee Pages 托管平台,可通过如下地址查看完成后的效果:https://jhlxge.gitee.io/coolshell-mirror/
2024年6月5日更新 :Gitee Pages服务已停止提供服务,可通过本机托管的如下地址访问:https://coolshell-mirror.work.zhuzhilong.com/
Gitee Pages 停服

缘起

陈皓(1976年-2023年5月13日),男,MegaEase创始人、资深技术专家、程序员。2023年5月13日,陈皓心梗逝世,享年47岁。

以上是百度百科中关于陈皓冷冰冰的直白描述,我跟陈皓在生活中没有任何交集,但是在技术层面却给了我很多的指引,他的酷壳站点上的一些文章对成长阶段充满迷茫的我都有醍醐灌顶、茅塞顿开般的功效。

随着陈皓的离世,作为其思想精髓的酷壳站上的700多篇文章还是很有必要永久流芳于世,看酷壳网的一些评论,也有不少人像我一样,在担心以后域名或服务器到期后网站不能访问,为了解决这个后顾之忧,我便在工作之余开启了酷壳网站镜像之路,这一系列的文章也就是将这一过程做一个记录,也便于帮助有需要的朋友能够做到举一反三。

成果展示

首先我们可以直接访问Gitee Pages 上托管的最终页面效果,看看镜像后的站点效果:https://jhlxge.gitee.io/coolshell-mirror/

首页第一屏如下图所示:
酷壳镜像站首屏

相较原站,这个镜像站做了如下优化:
1、采用 Hexo 进行构建,整站构建完后是纯静态的页面,无需后端应用服务器和数据库服务器,可直接托管在提供Pages 服务的云平台上。
2、数据获取更直观,当前酷壳站多了很多特别影响浏览体验的广告,新的镜像站更聚焦内容的阅读体验
3、适配移动端,增加暗黑模式,可在各种不同场景下有更好的阅读体验
4、添加时间轴栏目,可以以时间维度阅读按顺序所有内容
5、修正部分内容中的图片资源404问题:以前不少内容是直接外链外网资源的,一些外网关站或改版后不少资源便404了,本次镜像过程中由于需要爬取内容中的图片资源一同镜像,把发现的部分404资源手工修正了

镜像站建设过程

数据爬取

最近有在使用 magic-boot 做一些小功能,magic-boot 的一些介绍可以参考官网:https://www.ssssssss.org/magic-boot,magic-boot 是基于 magic-api 开发的一套快速开发框架,magic-api 提供了非常方便的在线开发体验。

本次数据爬取和爬取内容解析主要基于jsoup实现,主要过程如下:

整合jsoup

在 magic-boot 工程的 pom.xml 文件中引入 jsoup 依赖:

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.16.2</version>
</dependency>

新建数据表

爬取数据和分析数据过程中,需要将相关的数据保存到中间表中,便于后续利用,以下是本任务相关表的建表语句:

1、列表表

先爬取所有列表页面,然后分析列表中的内容链接再爬取内容页

CREATE TABLE `crawler_list` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `site_id` bigint DEFAULT NULL COMMENT '站点ID',
  `page_url` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '页面URL',
  `page_html` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '页面URL',
  `success_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否采集成功,Y:是,N:否',
  `create_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `target_links` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'page_html分析得到的目标链接,使用json数组存储',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='爬取站点的列表页面';

2、文章表

CREATE TABLE `crawler_article` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `page_html` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '页面HTML',
  `site_id` bigint NOT NULL COMMENT '站点ID',
  `page_url` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '页面URL',
  `md_html` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '转Markdown前的html',
  `md_text` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '转换后的markdown内容',
  `article_title` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '内容标题',
  `article_html` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '正文HTML',
  `click_count` int DEFAULT NULL COMMENT '阅读次数',
  `publish_date` datetime DEFAULT NULL COMMENT '发布时间',
  `vote_count` int DEFAULT NULL COMMENT '评论条数',
  `author` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '作者',
  `tags` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'Tag',
  `article_text` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '去掉html标签后的正文内容',
  `add_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `crawler_time` datetime DEFAULT NULL COMMENT '页面内容爬取时间',
  `crawler_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否爬取成功',
  `analysis_time` datetime DEFAULT NULL COMMENT '数据解析时间',
  `categories` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '分类',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=741 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='内容页采集表';

3、文章资源表

CREATE TABLE `crawler_resource` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `site_id` bigint NOT NULL COMMENT '站点ID',
  `resource_url` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '资源完整URL',
  `resource_ext` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '资源扩展名',
  `file_size` int DEFAULT NULL COMMENT '文件大小,单位byte',
  `file_md5` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '文件Hash',
  `source_path` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '原路径',
  `source_filename` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '原文件名',
  `add_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '添加事件',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2039 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='采集的资源表';
0

评论 (0)

取消