导出CSDN文章,并转成Hexo要求的样式,博客迁移

来源:互联网 发布:vs2015怎么编译c语言 编辑:程序博客网 时间:2024/06/13 02:56


想把CSDN博客同步到拿GitHub Page搭的独立博客上去,找了下,发现有人用Python写了个工具,可以将博客导出为MarkdownHTML格式:csdn-blog-export

把它搬到了百度盘,链接: http://pan.baidu.com/s/1o8fpxGI 密码: pgbb

用法很简单(注意:博客主题需切回“碧海蓝”,我的“极客世界”主题失效):
./main.py -u CSDN用户名 -f markdown./main.py -u CSDN用户名 -f html

便能得到我们博客的所有博文。
拿到博文后,我想把它改为Hexo接受的格式,主要是在.md格式文件头添加一段文件描述,像这样:

title: Hello Worlddate: 2014-05-27 10:04:08tag: 博客category: 博客建设---

顺便把文件名该为博文名。下面操作需要同时导出.md格式和.html格式,Python脚本从.html文件中提取出博文标题和博文创建时间,将它们插入.md文件:

#!/usr/bin/python# -*- coding: UTF-8 -*-import osimport re#解析博文HTML,获取博文时间、标题标签from bs4 import BeautifulSoup#解决中文编码问题import codecsmdPath = '/Users/wayne/blogposts/'htmlPath = '/Users/wayne/blogposts/html/'mdPosts = os.listdir(mdPath)for postName in mdPosts:    if postName.endswith('.md'):        #备份工具得到的文件名像这样:21049457.md,对当前文件夹中.md文件进行操作        #获取文件名中8位数字,存于prefix中,用于匹配和它对应的HTML文件        #然后从HTML文件中挖出博文发布时间,保存在timeStamp中        prefix = postName[:8]        html = open(htmlPath + prefix + '.html', 'r')        soup = BeautifulSoup(html)        tag = soup.find_all('span', class_="link_postdate")        timeStamp = tag[0].string        print timeStamp        #从HTML中获取博客标题,用于重命名.md文件        title = soup.title        temp = title.string        pos = temp.index(" - ")        newFileName = temp[:pos]        print newFileName        #弃用!        #.md文件中第一行大致长这样:#  [ Objective-C常用宏定义 ](/ichenwin/article/details/52813659)        #方括号中就是博文名,下面这段代码负责从.md文件第一行获取文章名        # mdFile = codecs.open(mdPath + postName, "r", 'utf-8')        # contents = mdFile.readlines()        # firstLine = contents.pop(0)        # print "firstline:" + firstLine        # newFileName = re.compile('\[([^]]+)\]').findall(firstLine)[0]        # mdFile.close()        #将.md中博文读入contents,往contents插入Hexo头部        #然后写回.md文件        mdFile = codecs.open(mdPath + postName, "r", 'utf-8')        contents = mdFile.readlines()        mdFile.close()        contents.insert(0, "---\n")        contents.insert(0, u"category: 技术笔记\n")        contents.insert(0, "tags: iOS\n")        contents.insert(0, "date: " + timeStamp + "\n")        contents.insert(0, "title: " + newFileName + "\n")        mdFile = codecs.open(postName, "w", 'utf-8')        newContents = "".join(contents)        mdFile.write(newContents)        mdFile.close()        html.close()        #重命名.md文件        os.rename(os.path.join(mdPath, postName), os.path.join(mdPath, newFileName + ".md"))
原创粉丝点击