CSDN外链失效3:

news2024/12/23 15:25:43

参考我之前的博客:

外链失效博客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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2264291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 中的字符串

目录 Java 中的字符串字符串的创建字符串的比较字符串的拼接如何定义一个空的字符串 Java 中的字符串 字符串的创建 在 Java 中&#xff0c;可以通过以下几种方式创建字符串&#xff1a; 1.使用字符串字面量&#xff1a; String str "Hello, World!";2.使用 new…

U盘结构损坏且无法访问:原因、恢复方案与预防措施

U盘结构损坏现象描述 U盘&#xff0c;这一小巧便捷的存储设备&#xff0c;在日常工作和学习中扮演着重要角色。然而&#xff0c;当U盘出现结构损坏且无法访问时&#xff0c;用户往往会陷入焦虑与困惑。具体表现为&#xff0c;将U盘插入电脑后&#xff0c;系统无法识别U盘&…

basic_ios及其衍生库(附 GCC libstdc++源代码)

basic_ios及其衍生库(附 GCC libstdc源代码) 我们由这张图展开我们的讨论 对于Date对象&#xff0c;只有实现了<<重载到输出流才可以插入到stringstream ss中 现在我有疑问stringstream是怎么做到既能输出又能输入的&#xff1f; 而且为什么stringstream对象能传给ostre…

【开源库 | minizip】Linux(Ubuntu18.04)下,minizip的编译、交叉编译

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-12-20 …

Gin-vue-admin(1):环境配置和安装

目录 环境配置如果443网络连接问题&#xff0c;需要添加代理服务器 后端运行前端运行 环境配置 git clone https://gitcode.com/gh_mirrors/gi/gin-vue-admin.git到server文件目录下 go mod tidygo mod tidy 是 Go 语言模块系统中的一个命令&#xff0c;用于维护 go.mod 文件…

java: 无效的目标发行版: xx

java: 无效的目标发行版: xx 背景java: 无效的目标发行版: xx 在 Intellij 的修复 背景 这里单独针对Intellij开发工具对 “java: 无效的目标发行版: xx”错误的修复。 java: 无效的目标发行版: xx 在 Intellij 的修复 同一台电脑使用多个JDK的时候容易出现在运行程序时容易…

vscode+编程AI配置、使用说明

文章目录 [toc]1、概述2、github copilot2.1 配置2.2 使用文档2.3 使用说明 3、文心快码&#xff08;Baidu Comate&#xff09;3.1 配置3.2 使用文档3.3 使用说明 4、豆包&#xff08;MarsCode&#xff09;4.1 配置4.2 使用文档4.3 使用说明 5、通义灵码&#xff08;TONGYI Lin…

leetcode-80.删除有序数组的重复项II-day12

总结&#xff1a;不必过于死磕一道题目&#xff0c;二十分钟没做出来就可参考题解

Docker 入门:如何使用 Docker 容器化 AI 项目(一)

引言 在人工智能&#xff08;AI&#xff09;项目的开发和部署过程中&#xff0c;环境配置和依赖管理往往是开发者遇到的挑战之一。开发者通常需要在不同的机器上运行同样的代码&#xff0c;确保每个人使用的环境一致&#xff0c;才能避免 “在我的机器上可以运行”的尴尬问题。…

EdgeX Core Service 核心服务之 Core Command 命令

EdgeX Core Service 核心服务之 Core Command 命令 一、概述 Core-command(通常称为命令和控制微服务)可以代表以下角色向设备和传感器发出命令或动作: EdgeX Foundry中的其他微服务(例如,本地边缘分析或规则引擎微服务)EdgeX Foundry与同一系统上可能存在的其他应用程序…

Keil5 STM32库函数的工程

库函数来间接的操作寄存器 条件编译&#xff0c;如果你定义了USE_STDPERIPH_DRIVER &#xff08;使用标准外设驱动&#xff09;这个字符串&#xff0c;stm32f10x_conf.h才有效

Vue2五、自定义指令,全局局部注册、指令的值 ,插槽--默认插槽,具名插槽 ( 作用域插槽)

一、自定义指令 使用步骤 1. 注册 (全局注册 或 局部注册) &#xff0c;在 inserted 钩子函数中&#xff0c;配置指令dom逻辑 2. 标签上 v-指令名 使用 1、自定义指令&#xff08;全局&#xff09; Vue.directive("指令名"&#xff0c;{ 指令的配置项 insert…

Docker部署GitLab服务器

一、GitLab介绍 1.1 GitLab简介 GitLab 是一款基于 Git 的开源代码托管平台&#xff0c;集成了版本控制、代码审查、问题跟踪、持续集成与持续交付&#xff08;CI/CD&#xff09;等多种功能&#xff0c;旨在为团队提供一站式的项目管理解决方案。借助 GitLab&#xff0c;开发…

MySQL基础笔记(三)

在此特别感谢尚硅谷-康师傅的MySQL精品教程 获取更好的阅读体验请前往我的博客主站! 如果本文对你的学习有帮助&#xff0c;请多多点赞、评论、收藏&#xff0c;你们的反馈是我更新最大的动力&#xff01; 创建和管理表 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数…

使用qemu搭建armv7嵌入式开发环境

目录 目录 1 概述 2 环境准备 2.1 vexpress系列开发板介绍 2.2 安装工具 2.2.1 安装交叉工具链 2.2.2 安装qemu 2.2.3 安装其他工具 3 启动uboot 3.1 uboot下载与编译 3.1.1 下载 3.1.2 编译 3.2 使用qemu启动uboot 4 启动kernel 4.1 下载和编译kernel 4.1.1 下…

数据思维的哲学思考

引言 天地合而万物生&#xff0c;阴阳接而变化起。 《荀子礼论》 数据思维的哲学基础源于唯物主义哲学。在马克思的唯物主义思想中&#xff0c;世界是物质的&#xff0c;物质是运动的&#xff0c;运动是有规律的&#xff0c;规律是客观的。 数据思维的哲学基础就是&#xff…

Dijkstra(迪杰斯特拉)最短路径算法可视化演示

Dijkstra(迪杰斯特拉)算法&#xff0c;是一种解决带权图中单源最短路径的经典算法。它由荷兰计算机科学家 Edsger Dijkstra 于1956年提出。在现实生活中&#xff0c;这个算法被广泛应用于导航系统、网络路由等场景。 比如在地图导航中&#xff0c;城市可以看作图中的节点&…

利用深度纹理实现全局雾效

1、为什么要实现屏幕后处理效果的全局雾效 既然Unity中已经提供了全局雾效&#xff0c;那为什么还要自己来实现呢&#xff1f;主要是因为Unity自带的全局雾效有以下几个缺点&#xff1a; 需要为每个自定义Shader按规则书写雾效处理代码自带的全局雾效无法实现一些自定义效果&…

解决“SVN无法上传或下载*.so、*.a等二进制文件“问题

今天&#xff0c;在使用Subversion提交代码到服务器时&#xff0c;发现无法提交*.a、*.so等二进制文件&#xff0c;右击这些文件&#xff0c;发现其属性为ignores。     问题原因&#xff1a;SVN的配置文件里&#xff0c;屏蔽了*.a、*.so文件的上传与下载&#xff0c;并把这些…

Linux下学 〖MySQL 〗表的属性之约束条件(下)(自增长auto_increament、唯一键unique key、外键foreign key)

绪论​ 每日激励&#xff1a;“不是看到希望才坚持&#xff0c;而是坚持了才有希望。—Jack” 绪论​&#xff1a; 本章是约束的下半篇&#xff0c;它将带你认识到一些在字段中非常常用的约束条件&#xff0c;自增长AUTO_CREMENT、唯一键UNIQUE KEY 和 外键FOREIGN KEY这三个。…