簡(jiǎn)書是一個(gè)簡(jiǎn)潔、高效的文字創(chuàng)作良姆、分享和閱讀平臺(tái).簡(jiǎn)書的編輯器支持Markdown,讓你可以專心進(jìn)行文字創(chuàng)作而不用考慮太多排版工作.當(dāng)年作者也是因?yàn)楹芟矚gMarkdown,而簡(jiǎn)書的Markdown很漂亮,就加入了簡(jiǎn)書.
優(yōu)秀的創(chuàng)作者,可能經(jīng)常修改自己作品,簡(jiǎn)書也考慮到了這些,為我們提供了文章離線包,但對(duì)于文章的圖片只保留了外鏈,如果電腦無法連網(wǎng),我們就只能看到純文本的作品... 對(duì)于一個(gè)文章含有大量圖的創(chuàng)作者,沒有圖片的作品,觀看效果會(huì)大打折扣.
為了解決圖片離線無法觀看的問題,作者用腳本將圖片緩存到了本地,很簡(jiǎn)單!只需四步...
1.登錄到簡(jiǎn)書后臺(tái)獲得自己所有的文章
2.解壓獲得的壓縮包
3.將下面提供的腳本放到.md文件的同級(jí)目錄
4. 運(yùn)行腳本
完成后效果
自動(dòng)創(chuàng)建文件夾為圖片分類
自動(dòng)將網(wǎng)絡(luò)圖片鏈接改為本地圖片鏈接
小結(jié)
簡(jiǎn)書是一個(gè)優(yōu)秀的創(chuàng)作社區(qū),這里不僅有文藝青年,也有程序員,作者也是最近才發(fā)現(xiàn),程序類的創(chuàng)作者是沒有簽約作者這個(gè)選項(xiàng)的... 所以,如果開發(fā)者們要往其它平臺(tái)遷移自己的編程類作品的話,這個(gè)腳本可以幫你省很多時(shí)間;
熱衷于收藏的創(chuàng)作者,可以把自己的簡(jiǎn)書包留個(gè)完整的備份,多年后,看看自己當(dāng)年的文章,也是一份不錯(cuò)的回憶!
腳本源碼(python3環(huán)境)
import re
import urllib.request
import urllib.parse
import os
import sys
import time
# 獲取當(dāng)前目錄下的文件名列表
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
# 將原文件中的網(wǎng)絡(luò)圖片地址改為本地地址
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)
# 根據(jù)提取的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)
# 將網(wǎng)絡(luò)圖片替換為本地圖片
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:
# 為單個(gè)文件創(chuàng)建單獨(dú)的文件夾
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:
# 如果圖片沒有名字,則按照時(shí)間產(chǎn)生的隨機(jī)字符串取名
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()