
为了解决图片离线无法观看的问题,作者用脚本将图片缓存到了本地,很简单!只需四步...
1.登录到简书后台获得自己所有的文章

2.解压获得的压缩包

3.将下面提供的脚本放到.md文件的同级目录

4. 运行脚本
完成后效果
自动创建文件夹为图片分类

自动将网络图片链接改为本地图片链接

小结
脚本源码(python3环境)
import re
import urllib.request
import urllib.parse
import os
import sys
import time
# 获取当前目录下的文件名列表
def get_files():
files = os.listdir()
new_files = list()
for file in files:
try:
new_file = re.match(r".*\.md$", file).group()
if new_file:
new_files.append(new_file)
except Exception as e:
pass
return new_files
# 将原文件中的网络图片地址改为本地地址
def inter_to_local(file_name, inter_addr, local_addr):
with open(file_name+".md", "r") as f:
content = f.read()
content = content.replace(inter_addr, local_addr, 1)
with open (file_name+".md", "w") as f:
f.write(content)
# 根据提取的url和图片名,下载图片
def core_download(dir_name, image_name,image_addr):
try:
time.sleep(2)
url = image_addr
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-Agent':user_agent}
req = urllib.request.Request(url, None, headers)
image_data = urllib.request.urlopen(req)
image_data = image_data.read()
# 打开文件
with open("./images/"+dir_name+"/"+image_name, "wb+") as f:
f.write(image_data)
print("图片%s下载完毕......"%image_name)
# 将网络图片替换为本地图片
inter_to_local(dir_name, image_addr, "./images/"+dir_name+"/"+image_name);
except Exception as erro:
pass
# 获取文章中图片的url,并下载到本地
def get_urls():
task_files = get_files()
try:
for task_file in task_files:
# 为单个文件创建单独的文件夹
task_file_pure = re.match(r"(.*)\.md",task_file).group(1)
try:
try:
os.mkdir("./images")
except:
pass
os.mkdir("./images/%s"%task_file_pure)
except:
pass
with open(task_file, "r") as f:
content = f.read()
one_file_image_names_urls = re.findall(r"!\[(.*?)\]\((.*?)\)", content)
try:
for image_name_url in one_file_image_names_urls:
# 如果图片没有名字,则按照时间产生的随机字符串取名
if image_name_url[0] is None:
image_name_url[0] = str(int(time.time()))
#获取图片格式
image_format = re.match(r".*(\..*?)\?.*", image_name_url[1]).group(1)
image_name = image_name_url[0]+image_format
image_url = image_name_url[1]
try:
task_file = re.match(r"(.*)\.md",task_file).group(1)
except:
pass
core_download(task_file,image_name,image_url)
except Exception as e:
pass
except Exception as e:
pass
def main():
get_urls()
pass
if __name__ == "__main__":
main()
如果您喜欢python,喜欢故事,请点赞或关注我!您的支持是对作者最大的鼓励!