使用python备份博客图床图片

说明

最近在写markdown文档的过程中,经常需要插入一些图片.因为托管博客的服务器空间有限,所以上传图片到图床再插入到markdown中.有时候又插入网上的图片,这些图片随时可能失效.导致我的博客网站显示图片错误.
所以花了一点时间,用python 正则匹配 markdown中图片链接,然后下载图片保存到本地文件夹img中.这样就不用担心图片失效啦,当我找到稳定的图床,可以随时把这些图片再上传更新,美滋滋~~~

功能

  • .md文件自动搜索
  • 正则匹配图片链接
  • 爬取图片内容
  • 保存文本到本地

步骤

读取文件 => 正则匹配 => 图片下载 => 保存本地

python代码

详细见我的github地址: https://github.com/wangshub/markdown-img-backup


# coding=utf-8
import sys
import os
import re
import requests
import urllib
import urllib2


def search(path, word):
    for filename in os.listdir(path):
        fp = os.path.join(path, filename)
        if os.path.isfile(fp) and word in filename:
            print fp
            download(str(fp))
        elif os.path.isdir(fp):
            search(fp, word)


def download(file_path):
    # filename = "test"
    name = file_path.split(u"/")
    filename = name[-1]
    f_md = open(file_path)

    # all text of md file
    text = f_md.read().decode('utf-8')
    # regex
    img_reg = r'\!{1}\[(.*?)\]\((.*?)\)'
    result = re.findall('!\[(.*)\]\((.*)\)', text)

    for i in range(len(result)):
        img_quote = result[i][0]
        img_url = result[i][1]
        # download img
        request = urllib2.Request(img_url)
        response = urllib2.urlopen(request)
        img_contents = response.read()
        # img name spell
        urlname = img_url.split(u"/")
        img_name = filename + '_' + \
            str(i) + '_' + img_quote + str(urlname[len(urlname) - 1])
        print img_name, '~~~', img_url
        # write to file
        f_img = open('img/' + img_name, 'wb')
        f_img.write(img_contents)
        f_img.close()
    f_md.close()

search(sys.argv[1], '.md')

食用方法

python md_image_bacup.py /path/to/your/file/

作者

Author : WangSong
E-mail : easternslope@yeah.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值