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