参考我之前的博客:
外链失效博客1:随想笔记1:CSDN写博客经常崩溃,遇到外链图片转存失败怎么办_csdn外链图片转存失败-CSDN博客
外链失效博客2:网络随想2:转语雀_md格式转语雀lake格式-CSDN博客
markdown笔记:MarkDown笔记记录app——待更新_md笔记软件-CSDN博客
事情起因:
最近堆积了好多博客,但是在csdn上发现外链都失效了
正好最近github copilot免费版本已经可以在vscode上使用了,虽然免费版的额度限制很多
至于学生认证的步骤,可以参考很多网上的教程:
重点不在于什么profile实名认证、email教育邮箱、2步验证、payment信息添加,
重点在于最后一步拍照验证的时候需要上传学生认证资料,只能使用电脑本身或者是手机浏览器的摄像头,但是非常糊,简单都拍不清文字,但是实际上只要手写验证资料再拍照即可(对,就是这么草率)
可以和自己的项目联动:
主要是编写了一个程序,用于提取下载原来markdown文件中的图片链接,构建本地图床,顺便修改原本的markdown文件替换为修改后图床的图片链接
import argparse # 用于解析命令行参数
import os # 用于操作文件和目录
import shutil # 用于文件复制
import re # 用于正则表达式操作
import requests # 用于发送HTTP请求
def download_image(url, folder):
response = requests.get(url, stream=True) # 发送HTTP GET请求获取图片
if response.status_code == 200: # 如果请求成功(状态码200)
filename = os.path.join(folder, url.split('/')[-1]) # 生成保存图片的文件路径
with open(filename, 'wb') as out_file: # 以二进制写模式打开文件
shutil.copyfileobj(response.raw, out_file) # 将响应内容写入文件
return filename # 返回保存的文件路径
else:
print(f"Failed to download {url}") # 如果请求失败,打印错误信息
return None # 返回None
# 当前文件夹内md个数计算
file_list = os.listdir() # 列出当前文件夹中的所有文件
count_md = 0 # 初始化Markdown文件计数
md_file = '' # 初始化Markdown文件名
for file in file_list:
if file[-3:] == '.md': # 如果文件以.md结尾
count_md += 1 # 计数加1
md_file = file # 记录文件名
# 添加命令行参数
parser = argparse.ArgumentParser() # 创建ArgumentParser对象
if count_md == 1:
parser.add_argument('--input', type=str, default=md_file, help='markdown file') # 如果只有一个Markdown文件,设置为默认输入文件
else:
parser.add_argument('--input', type=str, help='markdown file') # 否则需要指定输入文件
parser.add_argument('--imgdir', type=str, default='img', help='存图片文件夹') # 指定存放图片的文件夹,默认值为img
parser.add_argument('--output', type=str, help='输出md文件名') # 指定输出的Markdown文件名
args = parser.parse_args() # 解析命令行参数
imgdir = args.imgdir # 获取图片文件夹路径
mdout = 'mdout' # 输出内容所在文件夹
print(f"输入文件: {args.input} 图片文件夹: {args.imgdir} 输出文件: {args.output}")
if args.output == None: # 如果没有规定输出md文件名
args.output = os.path.join(mdout, os.path.basename(args.input)) # 使用输入文件名作为输出文件名
print(f"输入文件: {args.input} 图片文件夹: {args.imgdir} 输出文件: {args.output}")
# 文件夹创建
if not os.path.exists(mdout): # 如果输出文件夹不存在
os.makedirs(mdout) # 创建输出文件夹
if not os.path.exists(os.path.join(mdout, imgdir)): # 如果图片文件夹不存在
os.makedirs(os.path.join(mdout, imgdir)) # 创建图片文件夹
with open(args.input, 'r', encoding='utf-8') as f: # 以utf-8编码读取输入的Markdown文件
md = f.read() # 读取文件内容
# 正则提取
img_md = re.findall(r'!\[.*?\]\((.*?)\)', md) # 提取Markdown格式的图片路径
img_html = re.findall(r'<img src="(.*?)" .*?/>', md) # 提取HTML格式的图片路径
img_paths = img_md + img_html # 合并两个列表得到所有图片路径
for i in img_paths:
if i.startswith('http'): # 如果是远程图片
img = download_image(i, os.path.join(mdout, imgdir)) # 下载到本地
else:
img = os.path.join(imgdir, os.path.basename(i)) # 获取本地图片路径
shutil.copy(i, os.path.join(mdout, img)) # 复制到指定文件夹
if img:
md = md.replace(i, img) # 更新Markdown文件中的图片路径
with open(args.output, 'w', encoding='utf-8') as f: # 以utf-8编码写入输出的Markdown文件
f.write(md) # 写入更新后的Markdown内容
默认当前文件夹中的md文件作为输入,默认当前文件夹中的img文件夹为图床,默认mdout中的md为替换后的md文件
下载mdout文件夹中的img图片图床+替换后的md文件
本来是打算上传md文件之后再重新另外上传图床
但是其实图床虽然能够导入,但是对应位置信息全乱了,直接图片全堆在一起,还是没有替换整理掉原来的乱序的图片。
后来发现:
干脆不要在富文本编辑器中导入md,直接在非md编辑界面上复制粘贴发布文章即可
参考:
python提取markdown图片到当前文件夹并修改图片路径_markdown图片转本地-CSDN博客