最新消息:20181230 VPS服务器已从Linode换到腾讯云香港,主题仍用朋友推荐的大前端D8

163BlogToWordPress_v2012-01-04.py:实现163空间搬家到wordpress,支持日志(标题+分类+内容+时间)+评论+标签+图片(本博客+其他网站)

Python crifan 666浏览 0评论

1. 暂时只接受发邮件到green-waste (at) 163.com,指定你要搬家的163博客地址,我会把搬家出来的结果:导出的XML文件和下载下来的图片,打包发给你。

2. 关于其他一些高级需求,比如

(1)是否要替换图片地址

(2)是否启用翻译

(3)是否开启XML自动分割

(4)指定帖子发布地址前缀

(5)指定起始的postID

等等,请参考下文的解释。

3.关于源码:

以后可能会免费放出,也可能限于收费使用。暂未定。


——————————————————————————-
【简介】
此脚本作用是:
将163博客中的文章/帖子的所有内容(文章,分类,标签,评论,图片),全部都下载下来,导出为xml文件。
此xml文件是符合RSS 2.0规范的,可以被WordPress所识别的(WordPress eXtended RSS),
可以被导入到WordPress中去。
由此实现将163博客的所有内容搬家到WordPress中去。

【使用说明】
1.安装Python 2.7.2
http://www.python.org/ftp/python/2.7.2/python-2.7.2.msi
下载后,安装即可。
2.安装BeautifulSoup
http://www.crummy.com/software/BeautifulSoup/download/3.x/BeautifulSoup-3.0.6.py
下载后,改名为BeautifulSoup.py,再拷贝到与此脚本同目录即可。
3.脚本使用方法:
在Windows的命令行(开始->运行->cmd->回车)中运行命令:
当前脚本名称 -s 你的博客名称地址
例如:
163BlogMover_v2012-01-04.py -s http://againinput4.blog.163.com/
然后脚本就可以把你163博客中的所有帖子,评论,图片等,都下载导出为Wordpress可识别的XML文件。
如果导出xml文件大小超过2MB,还会帮你自动分割,省却你再用DivXML工具分割了。
更多高级功能,参见下面的详细功能列表。

【版本信息】
版本:     v2012-01-04
作者:     crifan
联系方式: https://www.crifan.com
           green-waste (at) 163.com

【背景说明】
1. 此脚本已在此环境下成功运行:
Win7 + Python 2.7.2 + BeautifulSoup 3.0.4/3.0.6 + WordPress 3.3 zh-CN

2. 此脚本的最始版本是:
http://www.yhustc.com/exp/other/BlogMover.zip
中的163-blog-mover.py为基础,
而改写的,因为该版本是之前写的,由于163博客改版了,导致脚本失效。
我是在其基础上,重写了绝大部分的内容,另外又增添了很多其他功能。

【详细的功能列表】
1. 对于通过-s参数传入的源URL地址,支持多种格式
    例如:
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/blog
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/blog/
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/blog/static/17279949120111127055419/
    都可以自动识别,并且帮你找到你的163博客的最早发布的那篇文章(first permanent link),然后依次导出所有的帖子内容。

    (1) 如果你不想让程序自动去分析出163博客里面最早发布的那篇帖子的地址,你也可以手动用-f参数指定,例如:
    163BlogToWordpress_v2012-01-04.py -f http://againinput4.blog.163.com/blog/static/172799491201091513711591/
    当然,你也可以通过-f参数指定从某篇文章开始,然后输出其本身及时间上在其之后发表的所有的文章,比如:
    163BlogToWordpress_v2012-01-04.py -f http://againinput4.blog.163.com/blog/static/17279949120111127055419/
    (2)你可以通过-l参数来指定只输出多少篇文章,比如:
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/ -l 100
    可见,通过-f和-l的搭配使用,你可以自己任意指定,输出博客中的任何一部分帖子内容。

2.支持导出博客帖子的各种详细信息
    对于输出的帖子的内容,支持内容较全,包括:
    标题,链接地址,作者,发布日期,发布帖子所用的易读易记的名字(post name),所属的分类,标签等。

3.(默认启用)支持下载导出评论的详细信息
    支持帖子所相关的评论信息的导入,其中包括每个评论的详尽的信息:
    评论内容,评论作者,评论作者的链接,评论作者的IP,日期等。
    (1)如果你不想要下载和输出评论信息,可以指定’-c no’参数去禁止下载和导出评论信息,例如:
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/ -c no

4.(默认启用)支持图片下载和图片链接替换
    支持下载帖子中所包含的你自己163博客的图片,并且支持自动把帖子中的地址,换为你所要的地址。
    下载下来的图片,默认是放在 当前文件夹你的博客用户pic 中。
    (1) 图片链接的替换规则:
    默认的是将这样的图片地址:
    http://imgAAA.BBB.126.net/CCC/DDD.EEE
    其中:AAA=None/1/3/6/7/182/…, BBB=ph/bimg, CCC=gA402SeBEI_fgrOs8HjFZA==/uCnmEQiWL40RrkIJnXKjsA==, DDD=2844867589615022702/667940119751497876, EEE=jpg
    替换为:
    gCfg[‘picPathInWP’]/DDD.EEE
    其中gCfg[‘picPathInWP’]可以通过后面要介绍的-w参数去配置。
    gCfg[‘picPathInWP’]默认配置为:
    http://localhost/wordpress/wp-content/uploads/BLOG_USER/pic
    其中BLOG_USER是从你输入的地址中提取出来的博客用户名。
    2.可以用-w自己指定所要替换的图片地址
    例如:
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/ -w http://localhost/wordpress/wp-content/uploads/pic/163
    当然,为了保证图片正常显示,你需要确认的是:
    A.你的wordpress中也要存在对应的目录
    B.你要手动把下载的图片拷贝到wordpress的对应的路径中去。
    (2) 你也可以通过’-p no’去禁止上述下载并替换图片的功能,例如:
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/ -p no
    (3) 在开启了上述处理图片的功能的前提下,默认会开启处理其他网站图片的功能
    对于博客中存在其他网站(非163博客的图片),可以下载对应的图片到:
    当前文件夹你的博客用户picother_site
    然后对应的地址替换为 -w指定的地址 + other_site
    例如:
    https://www.crifan.com/files/pic/work_and_job/other_site/pba_cn_1294G0I9200Z-2b3F.jpg
    替换为:
    http://localhost/wordpress/wp-content/uploads/BLOG_USER/pic/other_site/beauty_pba_1294G0I9200Z-2b3F.jpg
    (4) 如果不需要处理替他网站的图片,可以通过 -o no 去禁止此功能,比如:
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/ -o no
    (5) 类似地-w参数可以指定要替换的对于原先自己网站的图片的地址,可以通过-r指定对于其他网站的图片所要替换的地址。
    (6) (默认开启)添加了-e参数来开启或禁止近似图片忽略功能
    对于后面处理的某个图片的url,和之前某个出了错的图片地址,如果发现相似,那么就忽略处理此图片。

5. (默认启用)支持(google)翻译功能
    将原先一些中文句子,翻译为对应的英文。
    此功能是为了方便wordpress中,直接可以使用这些已经翻译好的,易读易懂的URL固定链接,去访问对应的博客帖子。
    同时也方便了SEO优化。
    目前的翻译支持,包括博客的帖子的标题的别名(post name)和目录的别名(nice name)。
   
    举例:
    某帖子标题(title)是:                                             “关于本博客的介绍”
    如果不翻译,那么帖子的别名(post name)就是:                       “%E5%85%B3%E4%BA%8E%E6%9C%AC%E5%8D%9A%E5%AE%A2%E7%9A%84%E4%BB%8B%E7%BB%8D”
    翻译成英文变为:                                                  ”Introduction on this blog“
    再去除(字母,数字,下划线,短横线之外的)非法的字符后,最终变成:“Introduction_on_this_blog”
    对应wordpress中帖子的固定链接,就从:
    http://localhost/2008/04/19/%E5%85%B3%E4%BA%8E%E6%9C%AC%E5%8D%9A%E5%AE%A2%E7%9A%84%E4%BB%8B%E7%BB%8D/
    变为了:
    http://localhost/2008/04/19/introduction_on_this_blog/
   
    (1) 翻译功能,虽然好用,但是可能会消耗较长时间,所以,如果你不需要此功能,
    或者为了省时间暂时禁止翻,可以通过指定参数‘-t no’去禁止相应的翻译功能:
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/ -t no

6.  支持XML文件超限自动分割
    默认所输出的XML文件,最大2MB,超过此限制,就会自动分割为多个XML文件。
    (1) 当然,你也可以通过’-x 最大字节数’来指定XML的最大限制,单位是字节,例如(200KB=200*1024=204800):
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/ -x 204800
    同理,如果你不想要XML自动分割功能,那么可以指定一个很大的数值,即可。

7. 支持指定帖子发布地址前缀
    默认情况下,会将帖子的链接地址设置为:
    http://localhost/?p=
    然后加上对应的postID,组成了帖子的发布地址,
    你可以通过’-a addr’的方式指定帖子发布地址的前缀,例如:
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/ -a https://www.crifan.com/?p=

8. 支持指定起始的PostID
    默认帖子的PostID是以0为开头的。
    如果有这类需求,已经用脚本将一个163博客导出xml并导入wordpress了,该空间一共100个帖子。
    然后再去搬家另外一个163博客,此时,可以指定postID的起始值为100,例如:
    163BlogToWordpress_v2012-01-04.py -s http://againinput4.blog.163.com/ -i 100
    然后生成的xml中的帖子链接地址中的postID,就会以100为起始,自动增加了。

10. 统计信息和显示信息
    (1)支持在脚本执行的最后,显示当前脚本中每部分的处理所花费的时间
    (2)支持每处理完10个帖子,打印以后提示信息,以免执行时间太长,勿让使用者以为脚本挂了

【其他说明】
1.关于脚本执行速度
实测多个163博客,帖子:内容+评论+图片+翻译,平均每个帖子消耗1.2秒左右。
如果去掉翻译,估计会快不少,有空待添加此处的测试数据。

2.为何输出的log日志不用中文?
输出日志为中文需要至少两点:
一是,你运行脚本所用到的命令行cmd的本地语言,需要设置为(936 ANSI/OEM – 简体中文 GBK),而不能是默认的(437 OEM – 美国)。
二是,脚本里面输出GBK的话,logging系统,好像没找到可以设置编码格式的,需要手动写logging for GBK的小函数转换一下。
鉴于以上两点,一个是麻烦脚本使用者,一个是麻烦作者,所以,日志输出为英文,免去乱码的尴尬。

3.为何没有提供正序和倒序选项配置?
简单说就是,因为wordpress中,对于你所输出的博客帖子(item)的顺序,是无关的。
其自动会导入所有的帖子(item),而不会关心item在rss文件中的顺序和位置。

4.翻译功能,可能占用较多时间
一般情况下,翻译功能可能并不会太耗时,但是在网速不太好等情况下,翻译功能可能会占用太多时间。
如果你发现执行时间太慢,可能是翻译功能占用了较多时间,此时可以考虑尝试一下’-t no’参数来禁止翻译,看看速度是否加快。

 

【脚本帮助信息】

Usage: 163BlogToWordpress_v2012-01-04.py [options]

Options:
  -h, –help            show this help message and exit
  -s SRCURL, –source=SRCURL
                        source 163 blog address, such as:
                        http://againinput4.blog.163.com
  -f STARTFROMURL, –startfrom=STARTFROMURL
                        a permalink in source 163 blog address for starting
                        with.It should be the earliest blog item link. if this
                        is specified, srcURL will be ignored.
  -l LIMIT, –limit=LIMIT
                        limit number of transfered posts, you can use this
                        option to test
  -c PROCESSCMT, –processCmt=PROCESSCMT
                        ‘yes’ or ‘no’. Process blog cmments or not. Set to
                        ‘no’ if you not need export comments of blog items.
  -u USER, –userName=USER
                        Blog author
  -i FIRSTPOSTID, –firstPostId=FIRSTPOSTID
                        the start blog post id number. when you have
  -p PROCESSPIC, –processPic=PROCESSPIC
                        Process picture or not: ‘yes’ or ‘no’. Default is
                        ‘yes’ to download & replace url. The downloaded
                        pictures can be found in a newly created dir under
                        current dir. Note, after import the generated xml file
                        into wordpress, before make pictures (link) in your
                        blog can shows normally, You should mannualy copy
                        these downloaded picture into WORDPRESS_ROOT_PATHwp-
                        contentuploadsYOUR_BLOG_USERpic while keep the
                        picture’s name unchanged. Set to ‘no’ if you do not
                        need process picture for your blog.
  -w WPPICPATH, –wpPicPath=WPPICPATH
                        the path in wordpress, where you want to copy the
                        downloaded pictures into. If you not set this
                        parameter, default will set to
                        http://localhost/wordpress/wp
                        content/uploads/YOUR_BLOG_USER/pic. Note: This option
                        only valid when processPic=’yes’.
  -o PROCESSOTHERPIC, –processOtherPic=PROCESSOTHERPIC
                        for other site picture url, download these pictures
                        and replace them with address with wpOtherPicPath + a
                        New Name. Note: This option only valid when
                        processPic=’yes’.
  -r WPOTHERPICPATH, –wpOtherPicPath=WPOTHERPICPATH
                        the path in wordpress, where you want to copy the
                        downloaded other site pictures into. If you not set
                        this parameter, default will set to
                        http://localhost/wordpress/wp
                        content/uploads/YOUR_BLOG_USER/pic/other_site. Note:
                        This option only valid when processOtherPic=’yes’.
  -e OMITSIMERRURL, –omitSimErrUrl=OMITSIMERRURL
                        ‘yes’ or ‘no’. For download pictures, if current pic
                        url is similar with previously processed one, which is
                        occur HTTP Error, then omit process this pic url.
                        Note: This option only valid when processPic=’yes’.
  -t TRANSLATEZH2EN, –translateZh2En=TRANSLATEZH2EN
                        ‘yes’ or ‘no’ to do translate. For url SEO and more
                        readable, translate chinese words into english for the
                        blog title’s post name, category nice name, and tag
                        slug name.
  -a POSTIDPREFIXADDR, –postidPrefixAddr=POSTIDPREFIXADDR
                        the prefix address for postid. default is:
                        ‘http://localhost/?p=’
  -x MAXXMLSIZE, –maxXmlSize=MAXXMLSIZE
                        Designate the max size in Bytes of output xml file.
                        Default is 2MB=2*1024*1024=2097152. 0 means no limit.
  -y MAXFAILRETRYNUM, –maxFailRetryNum=MAXFAILRETRYNUM
                        Max number of retry when fail for fetch page/….
                        Default is 3. Change it as you want. Set to 0 is
                        disable this retry function.

——————————————————————————-

转载请注明:在路上 » 163BlogToWordPress_v2012-01-04.py:实现163空间搬家到wordpress,支持日志(标题+分类+内容+时间)+评论+标签+图片(本博客+其他网站)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
67 queries in 0.097 seconds, using 9.60MB memory