Blogs
记一次图床迁移

前言

:::tip 背景 在我的博客建立之初,由于懵懂无知,把图片放在工程本地,导致打包大小变得很大,并且托管到GithubPages后图片加载的速度惨不忍睹。因此我上网搜索一些前辈的经验,这个经验就是建立图床,使用外链引入到Markdown笔记中,这样工程包的大小缩小了,访问速度也有所提升。
:::

![image.png](https://jetzihan-img.oss-cn-beijing.aliyuncs.com/blog/img/006SHRs9gy1h3p10rb6uwj31400kl7e5.jpg)  

最开始使用的图床就是微博图床,首先感谢新浪微博提供的免费图床(对外链无限制),以及速度快到惊人的cdn图片加速服务,还有丰富的浏览器插件,简直是薅羊毛!

但是,由于这个图床服务并不是微博官方提供给用户的服务,所以,一旦微博停止这个服务,我们的图片将无法访问,有一种“命运攥在别人手里”的感觉。因此,我还决定趁现在博客还不多的时候,将微博图床迁移到别的地方,这里,我选择阿里云oss

爬取已经使用的图片

首先我要把之前上传到微博图床的图片全部下载下来,放到本地,再转移到阿里云。

:::info 解决方案 先用Python爬虫将我的博客上的所有用微博图床存储的图片爬下来放在本地,以图片后缀命名。脚本的核心思想是使通过遍历HTML中的img标签,用正则表达式比对并抓取标签内的src地址参数。

    ex = '<img.*?src="(.*?)".*?'  # 比对
    img_list = re.findall(ex, web_text) 

然后再把链接地址对应的图片下载到本地。 :::

使用下面的Pyhton脚本:

import re
import requests
 
 
def download_img():
    error_img = 0
    success_img = 0
    url = input('请输入网站地址:')
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75'
    }
 
    web_text = requests.get(url, headers=headers).text
 
    ex = '<img.*?src="(.*?)".*?'
    img_list = re.findall(ex, web_text)
    print('图片地址:', img_list)
    if len(img_list) == 0:
        print('该站有反爬虫机制,请换一个网站')
 
    for img in img_list:
        try:
            # 补充协议头
            if not (img.startswith('http') or img.startswith('https')):
                img = 'http:' + img
            img_binary = requests.get(img, headers=headers).content
            # 切割出最后一个字符串
            file_name = img.split('/')[-1]
            # 切割 query字符
            file_name = file_name.split('?')[0]
            with open(f'./img/{file_name}', 'wb') as fp:
                fp.write(img_binary)
            print(file_name, ',下载成功')
            success_img += 1
        except Exception as e:
            print(e)
            error_img += 1
        continue
    print('下载图片完成!')
    return success_img, error_img
 
 
if __name__ == '__main__':
    success_img, error_img = download_img()
    print(f'总计下载:{success_img},下载失败:{error_img}')

执行结果抓图:
image.jpg
保存结果如图:
1.png :::tip 脚本参考 来自CSDN夏2同学http://t.csdn.cn/6pWJ5 (opens in a new tab) :::

阿里云oss注册

注册

首先,在阿里云首页选择对象存储OSS服务。
1.png


创建bucket

点击创建一个新的bucket。
1
填写bucket参数。
2


获取地域结点信息

打开创建的bucket列表,如图,只需要复制oss-cn-beijing即可,不需要后面的.aliyuncs.com。
2


创建AccessKey

来到页面的右上角,鼠标放在你的头像上,在弹出的框里选择AccessKey管理。
2
进入后,创建一个AccessKey
4
在弹出的界面里,记住你的accessKeyId和accessKeySecret.

PicGo配置

在Github中下载PicGo (opens in a new tab),并点击安装。在电脑桌面右下角的PicGo图标打开软件。在图床设置里面选择阿里云OSS,依照以下步骤填写信息:

  1. 设定Keyld:填写刚刚获得的AccessKeyID

  2. 设定KeySecret:填写AccessKeyIDSecret

  3. 设定储存空间名:填写bucket名称,这里填写的是bucket名称,不是浏览器里的域名。

  4. 确认存储区域:填写你的地域节点,注意复制的格式。

  5. 指定存储路径:其实就是自定义一个文件夹的名字,以/结尾,它会自动在你的bucket里面创建一个文件夹,并把图片上传进去。

3

:::tip 参考文章链接 http://t.csdn.cn/oZkFg (opens in a new tab) :::

替换原来博客中的微博图床

将前面爬取的图片上传到bucket文件夹中。
3
找到上传后文件的地址。

https://xxxxxx.oss-cn-beijing.aliyuncs.com/blog/1656914971349.png

我们可以观察到该地址是以https://xxxxxx.oss-cn-beijing.aliyuncs.com/blog/作为前缀的,而微博图床的连接是https://tva1.sinaimg.cn/large/1656914971349.png,由于两者后缀可以一一对应,我们只需要到工程文件中替换前缀即可。使用vscode的替换功能。
2
如图,替换后,全部连接就生效了。