前言
:::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}')
执行结果抓图:
保存结果如图:
:::tip 脚本参考
来自CSDN夏2同学
,http://t.csdn.cn/6pWJ5 (opens in a new tab)
:::
阿里云oss注册
注册
首先,在阿里云首页选择对象存储OSS服务。
创建bucket
点击创建一个新的bucket。
填写bucket参数。
获取地域结点信息
打开创建的bucket列表,如图,只需要复制oss-cn-beijing即可,不需要后面的.aliyuncs.com。
创建AccessKey
来到页面的右上角,鼠标放在你的头像上,在弹出的框里选择AccessKey管理。
进入后,创建一个AccessKey
。
在弹出的界面里,记住你的accessKeyId和accessKeySecret.
PicGo配置
在Github中下载PicGo (opens in a new tab),并点击安装。在电脑桌面右下角的PicGo图标打开软件。在图床设置里面选择阿里云OSS,依照以下步骤填写信息:
-
设定
Keyld
:填写刚刚获得的AccessKeyID -
设定
KeySecret
:填写AccessKeyIDSecret -
设定储存空间名:填写
bucket
名称,这里填写的是bucket名称,不是浏览器里的域名。 -
确认存储区域:填写你的地域节点,注意复制的格式。
-
指定存储路径:其实就是自定义一个文件夹的名字,以/结尾,它会自动在你的bucket里面创建一个文件夹,并把图片上传进去。
:::tip 参考文章链接 http://t.csdn.cn/oZkFg (opens in a new tab) :::
替换原来博客中的微博图床
将前面爬取的图片上传到bucket文件夹中。
找到上传后文件的地址。
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的替换功能。
如图,替换后,全部连接就生效了。