博客迁移(WP->Pelican)

今天心血来潮,想把自己在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 的文章

  1. 安装BeautifulSoup4lxml

    pip install BeautifulSoup4  lxml
    
  2. 安装 pandoc

    brew install pandoc
    
  3. 进入blog目录,将xml文件装换成markdown格式:

    pelican-import --wpfile ./xml/new2012.xml -m markdown -o ./tmp
    
  4. 运行以下脚本,将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快照

Pelican和Github构建静态博客

Comments !

blogroll

social