使用影刀快速迁移博客
使用影刀快速迁移博客
前言
搜索打开很多博客迁移的工具,但是大部分需要写代码或是通过一些脚本读取html进行转存,这样的话会导致我的博客出现一些数据混乱,一直没有找到一个比较合适方法进行快速迁移。
八月份接触了影刀和n8n各种RPA工具,这次创建了新的博客想着一口气把之前CSDN的170篇文章来一次整体搬家,虽然AI写代码会减少自己造轮子的情况,但是我使用Cursor , Trae 和 Antigravity , 他们给出的答案都是爬虫读取,效果一般 ,所以决定尝试使用PRA工具,结果在简单debug的情况下,大概可以三十分钟写完脚本,开始自动存入读取。
影刀
机缘巧合之下接触了影刀,用着感觉非常方便,既方便有变成经验的人写一些脚本,也方便一些非变成经验的人进行编程工作,之前帮助货代公司编写上传一飞或者获取ETA工具的脚本都是用影刀编写,速度和整体应用都很顺畅。
最重要的是个人版免费,对于个人或者小型团队足够了。当然,当程序复杂度上去后还是使用纯代码会方便,所以这个场景在我看来就是应用于demo,固定重复性劳动(Web , Client端没有尝试)
逻辑
原因
我希望能够完整的将我所有的博客迁移,但是由于之前一直没有博客文件的备份,大部分都找不到当时的图片和md文件,但是csdn会在平台自动转存到他的云端cdn中进行存储。
并且我测试了一下cdn的链接是不允许站外访问,通过附加我的博客域名 xlx.dev会导致解析错误。
结果
所以通过梳理,我确定路线为:
登陆我后台的个人主页
找到所有的文章列表

获得上传时间 (此处会出现两种情况,CSDN的时间采用了两种标签的样式,导致影刀抓取失败,所以这里需要设置一个
try...catch...获取两个的数据)
点击编辑
获得编辑页面的title和context

分析context中的所有网址,尤其是csdn的cdn头,替换成本地路径或是我自己的cdn路径
cdn的头包含两种:
1
2https://i-blog.csdnimg.cn/direct/*
https://i-blog.csdnimg.cn/blog_migrate/*
保存图片到本地
保存context和文章主题及时间到文件中
将图片与文章分别存储到每个以Title为标题的文件夹中


同时将图片存储到一个统一的位置,用于后期上传自己的cdn
步骤
1. 安装
国内推荐直接安装影刀工具, 官网 : https://www.yingdao.com/ , 下载安装包

2. 创建应用
- 新建一个网页自动化应用程序

根据上面提到的逻辑开始放置功能模块,首先完成获取文章列表的模块
打开后台网页,后面为了方便我直接使用的google浏览器登陆账户后使用

选择相似元素列表,点击右侧的校验元素可以看到数据是否正确

- 由于文章数量多,影刀又是基本上仿照手动操作来做,所以还需要滚动滚动条到底部,但是由于是动态加载所以需要滚动多次完整所有文章的主页缓存,我这里直接设置了十次滚动,进行设置,通过这个节点可以确保获取所有的文章数据


- 通过这样我再没有滚动的情况下可以拿到60篇文章,设置完默认滚动后可以直接获取到所有的162篇文章
遍历文章,获取文章数据
获取到每个文章的超链接,并打开新的网页从里面获取数据,浏览器需要设置为google浏览器

- 拿到时间数据

由于获取到的不是单纯的时间字符串还是有其他的文字部分,所以需要借助一个正则表达式处理一下数据
1
\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}

需要再点击编辑,从而进入编辑状态,最终网页获取时间及点击编辑的模块

获取文章内部Title和Context正文
获取到title后,需要按照title创建一个文件夹和同名的文件用于作为博客的本地存储地址
由于title中会有不少非法地址 ,
[\\/:*?"<>|]. 所以同样需要一个正则表达式对title进行过滤,从而拿到一个能正确创建的文件名字
- 组合地址

获取到正文后,提取正文中的网址贴,目的是将cdn的图片网址提取出来,注意这里需要将节点中的只找第一个匹配项取消勾选,不然节点只会返回第一个item
csdn的cdn使用两种不同的cdn网站存储图片,所以需要对两者都进行分辨,两种判定分别是:
1
2https://i-blog.csdnimg.cn/direct/*
https://i-blog.csdnimg.cn/blog_migrate/*正则表达式提取文本:
1
https://i-blog\.csdnimg\.cn/(?:direct|blog_migrate)/.+?\.[a-zA-Z]{3,4}

创建循环,因为csdn的cdn设置允许空referer,所以可以利用这个机制下载图
同样通过一个正则表达式获取所有的图片名字
1
https://i-blog\.csdnimg\.cn/(?:direct|blog_migrate)/(.+?\.(?:png|jpg|jpeg|gif|webp))
对图片进行两次保存,保存路径为 : folder // images 和 folder // title 中
每次循环结束后,都关闭网页,并且点选 忽略确认离开选择框 ,因为影刀的特性会触发CSDN的保存触发器

最终效果

