前言
事情是这样的,在写完上一篇文章后,将
markdown
文件部署到了自己的服务器上,然后发现自己博客的图片全部没有了,F12一看,才发现都变成了 403。这是为啥呢?
噢,原来是我之前把掘金当图床在使,狠狠得薅掘金一两年的羊毛。结果不知道啥时候突然开启了防盗链。导致了出现这个P1
级事故(破站虽然没人访问)。
因为我的文章都是靠图片占面积的,这么多图片一个个替换太麻烦了,所以我接下来打算将掘金上的文章全部爬下来包括图片,重新部署到自己的博客(vitepress)上去。
什么是防盗链
首先静态资源就是一个URI,防盗链就是为了防止别人拿你的链接,到处引用。比如我的个人博客,又或者其他平台的文章都在用掘金的图片,那么掘金的流量就会暴增。
所以一般开启防盗链是有必要的,当然我那个小破站,月 UV 数量,估摸着也就 5个左右。防人之心不可无,我还是先开启为敬了。
本次先不带来防盗链的实现,后续有机会补充吧。
实践Nodejs爬虫
在前面说到了,我需要将文章还有图片都下载下来,文章我转为 Markdown
存储。图片保持文件类型就行,直接下载到一个 images 目录内。
需要用到的插件
cheerio 类似 JQuery 一样的DOM操作(golang 有个 goquery)
turndown 将 HTML 转化成 Markdown
大致思路如下
实现一个简易爬虫
简单实现一个通过URL获取HTML的小功能,先请求拿到内容,然后通过cheerio
插件选中到掘金存放文章的根元素,最后通过 turndown
插件转化成 Markdown。
const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
const TurndownService = require('turndown');
const turndownService = new TurndownService();
// 掘金文章链接
const url = 'https://juejin.cn/post/7221567098466615353';
request(url, (error, response, body) => {
if (!error && response.statusCode === 200) {
// 解析DOM元素
const $ = cheerio.load(body);
// 获取文章内容
const content = $('.markdown-body').html();
// 转换为markdown
const markdown = turndownService.turndown(content);
// 写入文件
fs.writeFileSync('./docs/严老湿的文章.md', markdown);
}
});
可以看到markdown
文件已经出来了。