python一键下载与替换hexo博客里的图片地址

Posted Eritque arcus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python一键下载与替换hexo博客里的图片地址相关的知识,希望对你有一定的参考价值。

代码

# -*- coding: utf-8 -*-
# @Time: 2021/3/31
# @Author: Eritque arcus
# @File: downloadImage.py
import mimetypes
import os
import regex
import requests

if __name__ == '__main__':
    p = input("输入hexo的source目录")  # image path like D:\\hexo\\hexo\\source
    # 去尾
    if p.endswith("\\\\"):
        p = p[:len(p) - 1]
    image_p = p + "\\\\images"
    post_p = p + "\\\\_posts"
    # 查看博文目录是否存在
    if not os.path.exists(post_p):
        print("路径下没_posts路径,请重新输入")
        exit(1)
    else:
        os.chmod(p, 777)
    # 查看图片目录是否存在
    if not os.path.exists(image_p):
        os.makedirs(p + "\\\\images")
    else:
        os.chmod(p, 777)
    # 循环目录下每一个.md文件
    for filename in os.listdir(post_p):
        if filename.endswith(".md"):
            print(filename)
            path = post_p + "\\\\" + filename
            # 以utf8编码读取
            f = open(path, "r", encoding='utf8', errors='ignore')
            i = 0
            content = f.read()
            f.close()
            # 匹配markdown中的图片 即 ![tag](url)
            for text in regex.findall(r"\\!\\[[^\\s]*\\]\\([a-zA-z]+://[^\\s]*\\)", content):
                print(text)
                # 提取tag内容
                tag = regex.findall(r"\\!\\[[^\\s]*\\](?=\\([a-zA-z]+://[^\\s]*\\))", text)[0]
                # 提取url内容
                urldata = regex.findall(r"(?<=\\!\\[[^\\s]*\\])\\([a-zA-z]+://[^\\s]*\\)", text)[0]
                # 去掉括号
                u = urldata[1:len(urldata) - 1]
                # 提取当前文章的名字加上编号即为图片名字
                name = filename + "-" + str(i)
                # 获取图片
                response = requests.get(u)
                # 取请求头content-type属性获取扩展名如.png/.jpg
                content_type = response.headers['content-type']
                extension = mimetypes.guess_extension(content_type)
                # 请求返回内容
                img = response.content
                # 写入图片文件
                with open(image_p + "\\\\" + name + extension, 'wb') as f:
                    f.write(img)
                f.close()
                # 新引用地址
                new_u = "/images/" + name + extension
                # 替换原文
                content = content.replace(text, tag + "(" + new_u + ")")
                i += 1
            # 写入文章文件
            f = open(path, "w", encoding="utf8")
            f.write(content)
            f.close()

以上是关于python一键下载与替换hexo博客里的图片地址的主要内容,如果未能解决你的问题,请参考以下文章

关于自己搭建Hexo博客的心得体会

使用 Hexo 搭建静态博客

解决Hexo博客不显示图片的一种方法

使用hexo搭建个人博客

hexo博客图片问题

Hexo博客中如何插入图片