WordPress网站定制开发专家
WordPress企业主题特惠

赞一个 0

BlogsToWordpress是Python语言实现的脚本,帮助用户将新浪博客/百度空间/博客大巴Blogbus/网易博客/QQ空间/人人网/搜狐Sohu/天涯博客/CSDN/点点轻博客等搬家到WordPress网站程序的简易工具。

前言:

1.使用本脚本之前必看:

BlogsToWordPress使用前必读

2.想要看本程序的使用说明,可直接去这里:

BlogsToWordPress 的用法的举例说明

3.有任何问题,意见,建议,bug提交等,建议去专门的讨论区:

BlogsToWordPress – WordPress博客搬家工具 讨论区

4.如果想要对此脚本进行扩展,以支持更多类型的博客搬家,可参考:

如何扩展BlogsToWordPress以支持更多类型的博客搬家

 


BlogsToWordpress简介

BlogsToWordpress是Python语言实现的脚本。

主要用来实现:

1. 将(新版)百度空间,网易163,新浪sina,QQ空间,人人网,CSDN,搜狐Sohu,博客大巴Blogbus,天涯博客,点点轻博客等博客,搬家到wordpress

(即通过此Python脚本,将博客中的帖子的各种信息,导出为WXR文件。然后就可以将其导入wordpress,实现博客搬家了。)

2. 以及搬家后,修改原先帖子,添加搬家声明等信息。

下载BlogsToWordpress

blogs-to-wordpress中可以下载到所有版本的源码。

目前的各个版本及其下载地址分别是:

主版本号副版本号下载地址下载地址
Python源码不同平台下的,可执行程序
v1v2012-01-10BlogsToWordpress_v2012-01-10.7z
v2(未公开发布)
v3v3.0BlogsToWordpress_v3.0_2012-03-27.7z
v4v4.0BlogsToWordpress_v4.0_v20120331.7z
v5v5.5BlogsToWordpress_v5.5_2012-04-06.7z
v5.6BlogsToWordpress_v5.6_2012-04-06.7z
v6v6.2BlogsToWordpress_v6.2_2012-04-11.7z
v7v7.0BlogsToWordpress_v7.0_2012-04-16.7z
v8v8.3BlogsToWordpress_v8.3_2012-04-18.7z
v8.4BlogsToWordpress_v8.4_2012-04-24.7z
v8.6BlogsToWordpress_v8.6_2012-05-19.7z
v8.7BlogsToWordpress_v8.7_2012-05-20.7z
v9v9.1BlogsToWordpress_v9.1_2012-06-26.7z
v9.2BlogsToWordpress_v9.2_2012-07-02.7z
v11v11.5BlogsToWordpress_v11.5_2012-07-22.7z
v12v12.8BlogsToWordpress_v12.8_2012-08-20.7z
v13v13.8BlogsToWordpress_v13.8_2012-09-01.7z
v13.9BlogsToWordpress_v13.9_2012-09-05.7z
v16v16.0BlogsToWordpress_v16.0_2012-11-01.7z
v16.2BlogsToWordpress_v16.2_2012-11-05.7z
v16.6BlogsToWordpress_v16.6_2012-11-28.7z
v16.9BlogsToWordpress_v16.9_2013-03-11.7z

 

BlogsToWordpress的由来

关于最初的要把博客导入到wordpress中的详细折腾过程,参见:

记录 wordpress折腾过程

此处只简要说说过程。

之前机缘巧合,想弄一个个人网站,然后就找到了wordpress。

用wordpress把网站搭建起来后,就遇到了,需要把之前其他博客的帖子,搬家搬到当前的个人网站。

接着就知道了,有个wordpress importer的东西,支持把对应的WXR文件导入到wordpress中,就可以实现帖子搬家了。但是对于如何获得/生成对应的WXR文件,就遇到了问题。

网上所能找到的所有的方法,都不能实现我要的功能。

最接近,最可能的,可以实现需要的功能,算是下面这几个工具了:

1。先是BlogMover.zip中的163-blog-mover.py和hi-baidu-mover.py,都不能用,

2 。其次,后来找到的新版本的hi-baidu-mover_v2.zip中的hi-baidu-mover_v2.py,也不能用。

两者的最原始的代码,都是参考 Live Space Mover的,其代码放在google code了:live-space-mover

接下来,就是被逼无奈,在对于Python只有写过一个简单的脚本:

[tmp] python: parse command

的基础上,花了大半个月,实现了这个脚本的:

(1)第一个版本

BlogsToWordpress_v2012-01-10.7z

是百度和163分开实现的。

当时不了解如何通过python去登陆百度,163等博客,所以也就无法导入博客中的私人日志。

(2)第二个版本:

后来在折腾了:

WLW (Windows Live Writer) Plugin–InsertSkydriveFiles

后,搞懂了如何C#中如何登陆网页,搞懂了cookie等相关的逻辑,然后回头又来通过python语言,实现了这套逻辑,因此,也就可以把登录功能添加到了此脚本中。实现了第二个版本的BLogsToWordpress,即支持登陆模式下的,导入所有的帖子,包括公开的public的帖子,和私人的private的帖子。

并且又接着在登陆模式基础上,添加修改帖子内容,以添加博客搬家声明的功能。

本来想单独放出来此第二个版本的,但是考虑到代码有点乱,以及本来就像将两个单独的python脚本baiduBlogToWordpress和163BlogToWordpress合并到一起的,所以就又去花时间,折腾出下面的:

(3)第三个版本:

此版本,是将两个脚本中间包含了很多重复的代码,。因此,在其基础上,动了大手术:

把整个博客搬家相关的框架部分的代码,抽取出来放到核心的BlogsToWordpress中;

然后再把不同博客提供商(百度和163)对应的代码,分别放到BlogBaidu和BlogNetease中去;

同时又把常用的功能提取出来,整理为我的自己的python库:crifanLib.py

至此,才算实现我最终想要的,即把博客搬家,弄成框架式的。

这样,以后如果谁想要实现其他博客搬家的话,就可以参考已经实现的百度,163的博客的代码,然后照葫芦画瓢,去写个对应的BlogXXX,实现了对应的接口函数,也可以同样实现对应的博客搬家的功能了。

(4)第四个版本

http://code.google.com/p/blogs-to-wordpress/issues/list中看到有人提要求,希望实现新浪,qq空间等搬家到wordpress。关于这点,之前就考虑过,之前没折腾,主要是因为:

a。精力有限,忙于折腾百度和网易的搬家的实现。

b。之前已经有人实现了此功能:新浪博客搬家WordPress

c。自己之前不需要此功能

不过,此处,还是打算,再花些精力,把新浪博客搬家到wordpress的功能实现了。

然后就花了几天,实现了这个v4.0,支持新浪博客搬家了。

此部分,总得来说,难度不是很大,但是还是有很多技术细节需要处理的。

尤其是BeautifulSoup的一些bug等,花费了不少时间找到规避该bug的方法。

其他的,包括评论数据如何获取等,就是通过抓取网页分析一下,就可找到具体方法了。

(5)第五个版本

同上,实现了某人所希望的,支持QQ空间搬家的功能。

折腾这个,把基本功能实现了,即支持导出帖子的标题,分类,标签,发布时间,内容等,花了大概2,3天,但是后期处理百度的各种变态的编码等问题,以及添加支持各种类型的图片地址的支持等,加上最后的大量的测试,共又花了2,3天。前后一共算下来共花了大概5天时间。

总的来说,难度不大,但是需要再花点精力。

有点难度的事情,主要是python中如何使用好正则表达式re模块,去写单个的pattern,但却能匹配多种不同的地址等,需要对正则表达式比较熟悉才能搞定的。

最后还是感慨一下,百度在QQ空间的技术实现上,真的很变态,详情参见:

【记录】给Python脚本BlogsToWordPress中实现QQ空间搬家到wordpress的功能 + 感慨:QQ空间真的很变态

(6)第六个版本

看到某人说没找到支持人人网搬家到wordpress的,所以就去实现了人人网搬家到wordpress。

添加了基本功能的支持,难度不大,但是需要先去实现登陆模式,因为人人网不登陆,是无法查看博客帖子的。

然后又发现有些公共主页,是可以不登陆,也是可以查看,也就添加了对应的支持导出为wxr。

另外,又花时间去测试了一些个别帖子,其评论多达1000多个,对其全部抓取并处理。

(7)第七个版本

看到有人在百度知道中提及想找CSDN搬家到wordpress,所以,就又花些时间去实现了这个功能。

(8)第八个版本

是看到博客备份工具(Blog_Backup)中,支持很多博客,所以自己就又花点时间,对于搜狐等一些常见的博客,添加了支持。

(9)第九版

主要改变了WXR(XML)文件导出方式,由之前的在全部文章处理完毕,最后一次性导出所有的文章为WXR文件,

改为现在在处理过程中,(当大小超过文件大小限制,默认为2MB的时候)就导出。

因为之前的问题是,如果由于后期某个帖子出了问题,导致前面已经处理过的那么多帖子,都无法导出,还要重来一遍,

现在,可以很大程度的避免此问题了。因为处理过的帖子,加起来要导出的内容超过大小限制,就会及时导出。

这样最坏情况,也最多就是最近一些处理过当的帖子,没有及时导出而已。

(11)第十一版

先是去添加了博客大巴的支持,详见:记录为BlogsToWordPress添加Blogbus支持

后来又去添加了新版百度空间的支持,详见:记录给BlogsToWordPress添加新版百度空间的支持 + 吐槽新版百度空间

(12)一是把子模块都移至子文件夹,使得逻辑和架构更加清晰。因为东西要做得好,不光是外在好用好看,内在也要逻辑清晰才行。

二是由于有人希望导出新版百度的私人的帖子,所以又去增加了对于新版百度空间的登陆模式和更新帖子的支持。

(13)为了方便用户,不需要再去下载安装chardet,所以把chardet集成进去了,发布了v13.8

后来又更新人人网的登陆模式,支持手动输入验证码登陆。

(16)详见:

【记录】为BlogsToWordPress添加点点轻博客(BlogDiandian)的支持

【记录】为BlogsToWordPress添加天涯博客(BlogTianya)的支持

 

BlogsToWordpress的相关数据

代码量

此脚本,算是在163-blog-mover.py和hi-baidu-mover_v2.py的基础上,自己一点点实现的。

不过呢,现在最新版本的代码中所包含的原先代码,大概不超过2%,可以说是>98%的内容,都是自己一点点从无到有实现的,所以可以说是绝大部分都是自己实现的。

现在BlogsToWordpress的全部代码,加起来的话,估计差不多有近5000行,基本上算是原先两者之和的10倍左右。

工作量和技术难度程度

其实,了解软件的都知道,代码量,不能准确反应出背后的工作量和技术的难度程度。

对于脚本的工作量和技术方面的难度程度,大概评估一下,可以算是:

如果最开始的163-blog-mover.py和hi-baidu-mover_v2.py的工作量和技术难度,都加起来,算是3个人工时的话,

那么三个版本:

(1)不支持登陆模式的第一个版本

工作量和难度,大概有30个人工时.

即,如果说,写163-blog-mover.py和hi-baidu-mover_v2.py需要花费3天的话,写出第一个脚本,至少需要30天=1个月。

其中太多细节和技术难点需要处理,主要精力花费在:

A。分析网页源码,以搞懂评论内容是如何获得的,即分析如何去提交对应的url以及相关的机制。如何提交评论地址,一点点获得所有的评论的内容。

B。获得了返回的评论的原始信息,如何解析处理,获得WXR中所需要的信息。这部分,最消耗时间,太多细节,需要一点点处理。太多评论中的异常的内容,需要考虑。

C。对于处理图片的部分,花费了巨大的精力。主要包括,如何写出一个完美的可以捕获到所有的可能的类型的图片地址,然后如何去下载对应的图片,接着再替换图片。关于用正则表达式re模块去写pattern的话,遇到了各种可能,测试了N个博客,改了N个版本,花了很多的精力和时间。

(2)支持登陆模式的和支持修改帖子的第二个版本

工作量和难度,在第二个版本的基础上,大概有15个人工时。

即在第二个版本的技术上,还需要花大概半个月才可以搞定。

其中主要精力花费是:

A。用IE9或chrome去分析网页登陆的背后逻辑,主要是相关的cookie的来龙去脉。

B。实现了登陆代码后,再去检测是否是登陆的是自己的博客。

C。抓取网页过程,分析发帖的逻辑。

D。实现修改帖子的代码,并测试多个博客,再修补一些bug或遇到特殊问题如何处理,比如遇到敏感词无法修改的帖子,自动跳过等。

总之,这部分,由于有了之前C#下面搞懂的网页登陆的一套逻辑,所以,实现起来,相对技术难度不是那么高,但是还是要花很多时间分析和实现相应代码的。

(3)最后的框架式的第三个版本

工作量和难度,大概有10个人工时.

即在第二个版本的基础上,还要再花个10天左右。

主要精力花费:

A。整理分离出框架代码:BlogsToWordpress

B。整理好子模块的代码,BlogBaidu,BlogNetease,以及自己的python库:crifanLib.py

C。全部代码都OK了,也要做前后加起来有10多个博客的测试,确保都是可以工作的。

这部分,总的来说,没太大技术问题,但是需要花时间和精力整理出来,以及做最后的测试。

(4)第四个版本

在v3.0的框架已经弄好的基础上,算是花了3天左右的时间,搞定了支持新浪博客搬家。

这部分,主要精力花在:

a。解决beautifulSoup的bug上面

b。支持图片下载功能,花了不少时间,主要是re模块的pattern很难弄出完美的,所以暂时只支持sina自己博客的图片,暂不支持其他地址的图片了。

c。自己找了N个博客,测试了各项功能是否OK

(5)第五个版本

v5.5的精力花费:

a。添加基本功能

b。支持各种图片地址及规避百度变态的编码等设计问题

c。大量的测试

大概花了5天时间。

 

对于v5.6中,解决了sina博客的帖子的评论有时候无法获取全部的bug。

下面是一些测试数据:

帖子1:http://blog.sina.com.cn/s/blog_4701280b0101854o.html

所用命令:

BlogsToWordpress.py -f http://blog.sina.com.cn/s/blog_4701280b0101854o.html -l 1 -x 20971520

评论数目:20912个

所花费的时间:

———————————————————————-
Total Processed [0001] posts, averagely each consume seconds=1078.0930
Total Consume Time: 00:17:58
Find 1stLink: 00:00:00
Process Post: 00:11:47
Fetch   Pages     : 00:00:00
Process Pictures  : 00:00:00
Process Comments  : 00:11:37
Translate Name    : 00:00:05
Export Head : 00:00:00
Export Posts: 00:06:08
Export Foot : 00:00:00

 

帖子2:http://blog.sina.com.cn/s/blog_4701280b0102e0p3.html

所用命令:

BlogsToWordpress.py -f http://blog.sina.com.cn/s/blog_4701280b0102e0p3.html -l 1 -x 41943040

评论数目:37463个

所花费的时间:

Total Processed [0001] posts, averagely each consume seconds=2835.3740
Total Consume Time: 00:47:15
Find 1stLink: 00:00:00
Process Post: 00:22:23
Fetch   Pages     : 00:00:00
Process Pictures  : 00:00:00
Process Comments  : 00:22:14
Translate Name    : 00:00:03
Export Head : 00:00:00
Export Posts: 00:24:49
Export Foot : 00:00:00

(6)第六个版本

共大概花了3天时间,精力花费:

(1)实现基本功能,基本上1天就实现了:1.0天

(2)花时间调试,处理个别特殊的帖子,其编码也是有问题,只能特殊处理才可以:0.5天

(3)添加了支持所有评论(测试过1000多个的):0.5天

(4)支持了登陆模式(登陆并导出自己的人人网日志),非登陆模式(page模式,可导出一些不需要登陆即可查看的公共主页的日志),查看朋友模式(登陆自己的人人,但导出朋友的日志):0.5天

(5)测试了十多个人人网,加起来有好几百个帖子,N个评论:0.5天

(7)第七个版本

大概花了2天时间

(1)用1天实现了基本功能

(2)剩下一天用于测试,测试中发现了几个bug,以及一些个别博客特殊,需要修bug和加上特殊处理。

难度不大,但是对于CSDN博客,也发现一些变态的地方。

其博客帖子,最新的那几个,其下一篇,不是正常的按照时间顺序的下一篇,而是都变成了博客最早的那篇帖子。

本来这种希望读者可以多浏览你CSDN博客的帖子的做法,如果只是最新一篇帖子是这样处理的,那是可以理解的。但是却是最新的好几篇,甚至好多篇帖子,其下一篇都是最早帖子,那就是脑子进水的做法了。

(8)第八个版本

大概花了2天时间:

(1)1天时间了基本功能。

(2)剩下大半天,主要就是处理搜狐中,一些比较变态的事情,主要是blog content部分,包括了很多额外的垃圾内容,主要是:

精彩阅读 , 更多阅读 , 更多文章推荐阅读,体验新版博客,分享到搜狐微博,分割线clear,上一篇,下一篇等。

因为正常的博客,其设计出来,一般都是博客的帖子的内容与这帖子内容有关,但是非帖子内容本身的,则肯定是不同的div,不同的段落,而搜狐设计出来的博客帖子内容,通过Beautifulsoup处理后得到soup,再

foundContent = soup.find(id=”main-content”);

而得到的foundContent ,却包含了上面那些垃圾内容,导致处理起来,很是麻烦,要写出合适的pattern去再去用re.sub以去除这些内容,而且还要兼容不同格式,很是麻烦。

另外,其中很多搜狐的博客帖子,比较早期的一些,很多帖子是没有上下篇的,导致也是需要全部获取文章url列表,以得知下一篇的url,所以也是很费事。总之,搜狐博客设计的,也是尼玛够变态的。

(9)第九版

花了大概1天时间

主要是调整代码的框架结构,比较麻烦些。代码弄好后,经过基本测试,都OK了。

而且还测试了整体处理速度,原以为会慢,但是实际上还略快5%-10%。

(10)后续琐事不再赘述。

所支持的功能

原先脚本只支持最基本的提取帖子的标题,内容,分类,(部分)评论等。

而现在所实现的BlogsToWordpress的第三个版本,全部列出来,大概有:

1.支持输入的地址,是多种格式的。

2.支持处理全部评论

3.支持登陆模式 –> 可以导入私人日志了

4.支持登陆模式下的修改帖子内容->可以给原先帖子中添加搬家声明等内容

5.支持处理图片->下载图片,并替换相应地址:就像最近一些博客,比如QQ空间,百度空间等所支持的,你发布帖子的时候,自动检测出其他图片,问你是否要在发帖的同时,上传图片到你的空间的那个功能。

6.支持处理(其他网站的图片) –> 可以处理其他网站的图片了

7.支持本博客的和其他网站的图片地址替换时候的,自定义所要替换为的图片地址

8.是否自动忽略处理那些图片,该图片地址和之前已经处理过但出错的图片地址类似 –> 以节省时间

9.是否启用google翻译->用于生成WXR中的post title name,即wordpress中发布帖子的固定链接permanent link,可以通过启用google翻译,自动将标题翻译为英文,然后处理为有效的链接地址,这样导入到wordpress后,自动就有了固定链接了

10.支持自定义导出的帖子的地址的前缀

11.支持自定义所输出的WXR文件最大的大小值->导出WXR时,如果超出此大小,则会自动分割,避免了还需要额外的其他XML分割工具来分割了。

12.可自定义所要处理的帖子的类型,包括publicOnly,privateOnly,privateAndPublic

13.对于每种类型的帖子,具体如何处理:exportToWxr和modifyPost,即导出为WXR文件,还是修改帖子的内容。

14.是否自动跳过含敏感词的帖子,以避免修改帖子时候,某个帖子出现这类错误,而导致脚本无法继续执行了。

 

以上所有参数,都支持开关的特性,即某个功能你不需要,那么就可以传递参数去关闭该功能。

多说一句,正是由于功能太多了点,参数名字也太多,导致参数的缩略字母,都很容易互相冲突,搞得在定义哪个参数用哪个字母,都纠结了一番。。。

 

更多内容,请参考脚本的-h参数所输出的帮助信息。

BlogsToWordpress功能简介

本BlogsToWordpress脚本支持两大类功能:

1. 将博客内容导出为WXR文件

用于将WXR导入到wordpress中,实现博客搬家的功能

其中,对于导入为WXR,又可以分两类:

(1) 非登陆模式

没有提供用户名和密码的情况下,对于访问一个博客,那当然只能查看对应的公开的发表的帖子了。

因此也只能处理对应的公开发布的帖子。

(2) 登陆模式

在提供了用户名和密码的情况下,支持登陆对应的博客,然后可以根据设置,处理相应类型的帖子。

主要包含两类,一类是处理公开发表的帖子,将这些帖子导出为publish类型的,这样导入Wordpress后,就是对应的已发布的类型的帖子了。

另一类主要是,对于有些博客中,包含有些私人类型的帖子

(百度空间中,会显示出“该文章为私有”;

网易博客中显示出“私人日志”)

将这类帖子,导出为private,这样,导入wordpress后,其帖子属性就是private了,就不会公开发布出来,可以在:

文章 –> 所有文章 –> 私密,中看到对应的私人的帖子。

2. 修改帖子内容

用于在博客搬家之后,给原先博客中的每个帖子,添加对应的搬家声明类的文字说明。

其他一些说明

1.已经在wordpress官网中的 zh-cn:导入内容 中添加此链接,以方便想要搬家的人找到这里。

上一篇:

下一篇:

在线客服
在线客服关闭
WPYOU官方微信

扫码关注官方微信