今天心血来潮,想把自己在wordpress上的博客迁移到刚刚用pelican在github上搭建好新博客,折腾了一下午,记录了一下过程。
将博客文章从wordpress导出xml文件
进入wordpress后台,选择工具
-> 导出
。
这里要注意的是,如果文章多,或者评论多的话,最好根据年份或者根据分类来导出文章,这样文件较小,后面各种处理都比较方便。
将博客里面的图片下载到本地
这里使用了zoomquiet大妈的一个脚本(修改了两个地方:添加了异常处理,由于有些图片的地址已经失效,容易读取失败;添加了网络超时处理)。
#coding=utf-8
import re
import codecs
import urllib2
# 打开RSS文件读取内容
file = codecs.open('wordpress.2014.xml', 'r', 'utf-8')
content = file.read()
file.close()
# 用正则从RSS中提取所有图片链接地址
p = re.compile('src="([\w\W]+?)"')
urls = p.findall(content)
# 下载图片文件,并保存到img目录
for url in urls:
print url
opener = urllib2.build_opener()
req = urllib2.Request(url.encode('utf-8'))
try:
resp = opener.open(req, timeout = 5).read()
newname = url[url.rfind('/')+1:]
print newname
outfile = open('./img/' + newname , 'wb')
outfile.write(resp)
outfile.close()
except Exception, e:
print '%s image download fail' % url
else:
pass
finally:
pass
将图片上传到七牛
参考七牛文档,配置conf.json
文件
然后执行 qrsync /path/to/your-conf.json
,会将图片上传到七牛
替换xml中图片的url
#coding=utf-8
import re
# 这里修改成自己的空间地址
strbucketurl = "http://bucket.qiniudn.com/"
# 打开RSS文件读取内容
file = open("wordpress.2014.xml", "r")
content = file.read()
file.close()
# 用正则从RSS中提取所有图片链接地址
p = re.compile('(http:.*?\.(jpg|png))')
urls = p.findall(content)
print urls
iCount = 0
# 替换所有url
for arrlist in urls:
url = arrlist[0]
newname = url[url.rfind('/')+1:]
newurl = strbucketurl + newname
print url
print newurl
print '------------'
iCount = iCount + 1
content = content.replace(url, newurl)
print 'change url count:%d' % iCount
outputfile = open('new2013.xml', 'w')
outputfile.write(content)
outputfile.close()
注意:执行上面脚本记得修改成自己的bucket地址!!!
将xml转换成markdown格式
这一步比较复杂,自己也折腾了好久,踩了好多坑,参考了xdays 的文章
-
安装
BeautifulSoup4
和lxml
pip install BeautifulSoup4 lxml
-
安装
pandoc
brew install pandoc
-
进入blog目录,将xml文件装换成markdown格式:
pelican-import --wpfile ./xml/new2012.xml -m markdown -o ./tmp
-
运行以下脚本,将markdown的文件名unquote成字符串:
python changeMDname.py ./tmp ./content/cat/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
#!/usr/bin/env python # -*- coding: utf-8 -*- from urllib import unquote import os import sys top = sys.argv[1] out = sys.argv[2] flist = sum([[os.path.join(base,file) for file in files] for base,dirs,files in os.walk(top)],[]) os.mkdir(out) for i in flist: dirname = os.path.dirname(i) with open(i) as f: s = f.readlines() for l in s: if l.startswith('Slug'): index = s.index(l) p = l.strip().split() filename = unquote(p[-1]) p[-1] = filename + '\n' s[index]=' '.join(p) with open('%s/%s.md'%(out, filename), 'w') as g: g.write(''.join(s)) break
然后就可以发布blog了
所用到的脚本可以在这里下载
参考:
迁移SAE wordpress的图片到jekyll - 注:已经打不开了,参考的google快照
Comments !