上一篇文章讓你們脫坑簡書,這篇文章來具體說說如何脫坑。html
本文將教會你如何把簡書中的全部文章(包括文章內的圖片)進行導出,而且將利用這些文章創建本身的博客~python
首先,咱們須要把本身在簡書原有的文章導出,這裏能夠利用簡書的導出文章功能,步驟以下:git
登陸以後選擇「設置」github
在設置頁面先點擊左側的「帳號管理」,而後在右邊選擇「下載全部文章」 markdown
這樣就能下載全部文章了,不過僅僅是文章的文字內容而已,你上傳過的那些圖片在文件裏面只是一個連接而已~網絡
隨便打開一篇看看,以下圖:app
這樣確定不行啊,只下載了文字內容,沒下載圖片。可是別急,下面我用Python作了一個小工具,能夠把文章中的全部圖片下載下來,而且把文章中的全部圖片連接替換爲本地的連接~工具
markdown裏的圖片處理我以前已經寫過博客了,看這裏:python實現解析markdown文檔中的圖片,而且保存到本地~url
不過我此次換了一種方式來處理markdown,以前的作法有點繞,並且只是單純的下載圖片,沒有把圖片連接替換成本地的相對地址。spa
此次我用了mistletoe這個庫,能夠實現將markdown解析爲一個xml樹,這樣比起我以前的作法少了一步哈哈,能夠直接讀取markdown裏的全部圖片,而後一一下載,以後經過正則匹配的方式,對圖片進行一一替換。下載的文件夾用了Typora的方案:markdown文件名.assets
。
下載和替換圖片的方法:
def download_and_replace_image(filepath: str):
print(f'正在處理文件:{filepath}')
print(filepath)
with open(filepath, 'r', encoding='utf-8') as f:
file_content = f.read()
html = mistletoe.markdown(file_content)
soup = BeautifulSoup(html, features='html.parser')
for img in soup.find_all('img'):
img_url: str = img.get('src')
if not img_url.startswith('http://') and not img_url.startswith('https://'):
print(f'不是有效的網絡圖片連接,跳過')
return
img_name = os.path.basename(img_url.replace(url_suffix, ''))
print(f'下載圖片:{img_name}')
download_pics(img_url, filepath)
if '.' in img_name:
img_base_name = img_name[0:img_name.index('.')]
else:
# 沒有圖片後綴的話就加上jpg
img_base_name = img_name + '.jpg'
img_name += '.jpg'
img_relative_path = os.path.join(os.path.basename(filepath).replace('.md', '.assets'), img_name)
print(f'替換圖片連接:{img_url} with {img_relative_path}')
file_content = re.sub(f"!\\[.*?\\]\\((.*?){img_base_name}(.*?)\\)", f'{{% assets {img_base_name} %}}', file_content)
file_content = file_content.replace(f'{{% assets {img_base_name} %}}', f'![]({img_relative_path})')
updated_file_content = file_content
with open(filepath, 'w+', encoding='utf-8') as f:
print(f'改動寫入文件:{filepath}')
f.write(updated_file_content)
複製代碼
搭配線程池加快處理速度:
def run():
print('正在處理。')
work_path = os.path.join('.', 'docs')
pool = threadpool.ThreadPool(4)
args = []
for root, dirs, files in os.walk(work_path):
for filename in files:
if filename.endswith('md'):
filepath = os.path.abspath(os.path.join(root, filename))
args.append(filepath)
# download_and_replace_image(filepath)
tasks = threadpool.makeRequests(download_and_replace_image, args)
[pool.putRequest(task) for task in tasks]
print('=> 線程池開始運行')
pool.wait()
print('任務完成。')
複製代碼
完整代碼我稍後上傳到github,感興趣的同窗能夠去下載 (我以爲應該沒有)
上面發了代碼可能對大部分同窗來講不實用,別擔憂,我早就把這個功能作成了小工具供你們下載~
下載下來放在和你的文章同個文件夾,雙擊打開便可自動處理文章,舉個例子,圖片中每一個文件夾就是一個文章分類,每一個文件夾下面有若干個markdown文件,把程序放在這裏運行便可,(有不懂的能夠後臺留言)
在公衆號「畫星星高手」後臺回覆「簡書」便可得到下載連接
只是下載了文章和圖片並非咱們的最終目的,有了這些文章和圖片,咱們能夠搭建新的博客,而不用依靠某個平臺,不用受無良平臺的制約~
關於使用Github、Gitee等平臺搭建免費博客的操做,我會在下一篇文章中介紹,歡迎關注哦~