11-08 周三 解决csdn外链转存失败问题

简介

 在使用typora + picGO撰写自己的博客时,图像已经转换为了静态资源,但发表在CSDN上,如果直接复制粘贴,csdn会将其中的图片链接再次转存到自己的图像服务器中,这有很大的问题。那么如何解决这个问题呢?

问题描述

 在我们写好的markdown文件中,会存在很多如下的内容:
在这里插入图片描述
 而csdn在检测到相关内容时,会自动进行外链图片下载和存储,但非常容易失败。一个一个下载又非常耗时耗力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
而使用<img>标签,则不需要进行转存。

解决方式

解决方式一: 使用vscode编辑器

核心思想: 使用正则匹配,通过提取Group来实现功能。

 使用vs code进行替换。将模式替换为<img>
使用替换功能,开启正则表达式功能:
在查询框中输入:

!\[.*\]\((.*?)\)

然后在替换框中输入如下内容:

<img src=$1>

然后全局替换,即可完整markdown的图片转换为资源的<img>,而且不会再次触发外链图像转存了。

解决方式二: 代码片段


# -*- coding: utf-8 -*-
# @Author: yq1ng
# @Date:   2021-05-20 17:22:08
# @Last Modified by:   yq1ng
# @Last Modified time: 2021-05-20 18:19:47

import re
import argparse
import os

def parse_argument():
    parser = argparse.ArgumentParser(description="main")
    parser.add_argument('--old_file', type=str, default=-1, help='original md file')

    return parser.parse_args()

if __name__ == '__main__':
    args = parse_argument()
    old_path = args.old_file
    if not os.path.isfile(old_path):
        raise ValueError("请输入有效的文件")
    
    print(f"old_file: {old_path}")
    md_path = os.path.dirname(old_path)
    file_name = os.path.basename(old_path)
    new_path = os.path.join(md_path, "csdn-"+file_name)
    old_file = open(old_path, 'r', encoding='utf-8')
    new_file = open(new_path, 'w', encoding='utf-8')

    old_line = old_file.readline()
    count = 0

    while old_line:
        if "![" in old_line:
            url = re.findall('https://.*png|https://.*jpeg|https://.*jpg|https://.*JPG', old_line)
            img = '<img src="' + url[0] + '"/>'
            new_line = re.sub('!\[.*\)', img, old_line)
            new_file.write(new_line)
            print(old_line + '   ===>   ' + new_line)
            count += 1
        else:
            new_file.write(old_line)
        old_line = old_file.readline()

    old_file.close()
    new_file.close()

    print('\n已成功替换' + str(count) + '处外链问题')
    ```
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值