最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

hi-baidu-mover_v2012-01-07.py:实现百度空间搬家到wordpress,支持日志+评论+图片(本博客+其他网站)+替换音频字符串

Python crifan 2805浏览 0评论

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

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

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

(2)是否启用翻译

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

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

(5)指定起始的postID

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

3.关于源码:

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

 


——————————————————————————-
【简介】
此脚本作用是:
将百度空间中的文章/帖子的所有内容(文章内容,评论,图片(自己博客的+别的网站的)),
全部都下载下来,导出为xml文件。
此xml文件是符合RSS 2.0规范的,可以被WordPress所识别的(WordPress eXtended RSS),
可以被导入到WordPress中去。
由此实现将百度空间的所有内容搬家到WordPress中去。
因此,此脚本一般被称为:百度空间搬家(到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 http://hi.baidu.com/你的博客名称/
例如:
hi-baidu-mover_v2012-01-07.py -s http://hi.baidu.com/recommend_music/
然后脚本就可以把你百度空间中的所有帖子,评论,图片等,都下载导出为Wordpress可识别的XML文件。
如果导出xml文件大小超过2MB,还会帮你自动分割,省却你再用DivXML工具分割了。
更多高级功能,参见下面的详细功能列表。

【版本信息】
版本:     v2012-01-07
作者:     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://b2.broom9.com/?page_id=519
写的,为了实现从微软的Live Space搬家到WordPress,最新版本在这里:
http://code.google.com/p/live-space-mover/
后来前后经过:
http://www.yhustc.com

tonynju.iteye.com
的修改,用于百度空间的搬家,最新版本是2011年4月左右的。
但是此时(2012-01-07),由于百度空间改版,html源码改变,导致该脚本已经失效。
我是在其基础上,重写了大部分的内容,另外又增添了很多其他功能。
在此感谢前面三位的努力。

【详细的功能列表】
1. 对于通过-s参数传入的源URL地址,支持多种格式
    例如:
    hi-baidu-mover_v2012-01-07.py -s http://hi.baidu.com/recommend_music
    hi-baidu-mover_v2012-01-07.py -s http://hi.baidu.com/recommend_music/blog
    hi-baidu-mover_v2012-01-07.py -s http://hi.baidu.com/recommend_music/blog/
    hi-baidu-mover_v2012-01-07.py -s http://hi.baidu.com/recommend_music/blog/item/f36b071112416ac3a6ef3f0e.html
    都可以自动识别,并且帮你找到你的百度空间的最早发布的那篇文章(first permenant link),然后依次导出所有的帖子内容。

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

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

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

4.(默认启用)支持图片下载和图片链接替换
    支持下载帖子中所包含的你自己百度空间的图片,并且支持自动把帖子中的地址,换为你所要的地址。
    下载下来的图片,默认是放在 当前文件夹你的博客用户pic 中。
    (1) 图片链接的替换规则:
    默认的是将这样的图片地址:
    http://hiphotos.baidu.com/BLOG_USER/WHICH_KIND_PIC/item/PIC_NAME.PIC_SUFFIX
    其中:
    BLOG_USER=recommend_music/recommend%5Fmusic,
    WHICH_KIND_PIC=pic/abpic/mpic,
    PIC_NAME=59743562b26681cfe6113a78/069e0d89033b5bb53d07e9b536d3d539b400bce2,
    PIC_SUFFIX=jpg/jpe/…
    替换为:
    http://localhost/wordpress/wp-content/uploads/BLOG_USER/pic/PIC_NAME.PIC_SUFFIX
    其中:
    BLOG_USER=recommend_music
    其中,对于其中你所要替换的地址:http://localhost/wordpress/wp-content/uploads/BLOG_USER/pic
    可以用-w自己指定,例如:
    hi-baidu-mover_v2012-01-07.py -s http://hi.baidu.com/recommend_music/ -w http://localhost/wordpress/wp-content/uploads/pic/baidu
    当然,为了保证图片正常显示,你需要确认的是:
    A.你的wordpress中也要存在对应的目录
    B.你要手动把下载的图片拷贝到wordpress的对应的路径中去。
    (2) 你也可以通过’-p no’去禁止上述下载并替换图片的功能,例如:
    hi-baidu-mover_v2012-01-07.py -s http://hi.baidu.com/recommend_music/ -p no
    (3) 在开启了上述处理图片的功能的前提下,默认会开启处理其他网站图片的功能
    对于博客中存在其他网站(包括其他百度空间的图片),可以下载对应的图片到:
    当前文件夹你的博客用户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 去禁止此功能,比如:
    hi-baidu-mover_v2012-01-07.py -s http://hi.baidu.com/recommend_music/ -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’去禁止相应的翻译功能:
    hi-baidu-mover_v2012-01-07.py -s http://hi.baidu.com/recommend_music/ -t no

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

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

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

9.  支持多种格式的帖子发布时间
    百度空间中,支持针对,帖子发布时间的格式,进行多达3×4=12中不同组合,例如:
    (1) 2008-04-19 19:37
    (2) 2010-11-19 7:30 P.M.
    (3) 2010-11-19 下午 7:30
    (4) 2010/11/19 19:30
    (5) 2010/11/19 7:30 P.M.
    (6) 2010/11/19 下午 7:30
    (7) 2010-11-19 19:30:14
    (8) 2008年04月19日 6:47 P.M.
    (9) 2010年11月19日 下午 7:30
    (10)2010年11月19日 星期五 19:30
    (11)2010年11月19日 星期五 7:30 P.M.
    (12)2010年11月19日 星期五 下午 7:30
    目前都已经支持,均可正确解析。

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

11. 支持替换FCK_MP3_MUSIC相关部分音频播放器所支持的字符串
    (1)对于百度空间的帖子,如果插入了音乐播放器,那么就会有类似于这样的:
    <img name=”FCK_MP3_MUSIC” src=”xxxx” xxx rel=”xxx” />
    部分的内容,此处支持将这部分的内容,替换为wordpress中所支持的音频播放形式的字符串:
    [audio:${category}/${postTitleName}.mp3|titles=${titleName}]
    例如:
    [audio:pure_music/Track_Listing_Bana_open_grassland_clustered_into_the_sea_here_Luan_Hong_-_Chen_Yue.mp3|titles=【歌曲推荐】彼岸花开成海 此地 荒草丛生(乱红 –  陈悦)]
    这样,替换后的字符串,就可以被wordpress中的一些音频播放器,如Audio Player所识别并播放了。
    此功能用法为:
    hi-baidu-mover_v2012-01-07.py -s http://hi.baidu.com/recommend_music -m replacedMusicString.txt
    其中,replacedMusicString.txt是当前文件夹下的一个文本配置文件,内容为:
    [audio:${category}/${postTitleName}.mp3|titles=${titleName}]

【其他说明】
1.关于脚本执行速度
实测多个百度空间,帖子:内容+评论+图片+翻译,平均每个帖子消耗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: hi-baidu-mover_v2012-01-07.py [options]

Options:
  -h, –help            show this help message and exit
  -s SRCURL, –source=SRCURL
                        source Baidu space address, such as:
                        http://hi.baidu.com/recommend_music/blog
  -f STARTFROMURL, –startfrom=STARTFROMURL
                        a permalink in source Baidu space 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 and nice name of category.
  -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
  -y MAXFAILRETRYNUM, –maxFailRetryNum=MAXFAILRETRYNUM
                        Max number of retry when fail for fetch page/get
                        comment etc. Default is 3. Change it as you want. Set
                        to 0 is disable this retry function.
  -m REPLMUSICCFGFILE, –replMusicCfgFile=REPLMUSICCFGFILE
                        Replace baidu FCK_MP3_MUSIC string into this
                        configured string, eg: replacedMusicString.txt, while
                        replacedMusicString.txt contain ‘[audio:${category}/${
                        postTitleName}.mp3|titles=${titleName}]’. Default is
                        none, means not replace.

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

转载请注明:在路上 » hi-baidu-mover_v2012-01-07.py:实现百度空间搬家到wordpress,支持日志+评论+图片(本博客+其他网站)+替换音频字符串

发表我的评论
取消评论

表情

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (4)

  1. 正好评论中include EN分号;或者是中文分号;那又怎么办

    crifan12年前 (2011-12-28)回复
  2. 运行环境相同,使用时发生错误:
    LINE 892  : ERROR    ***Error: Unknown Error !
    Traceback (most recent call last):
      File "D:baidu1218.py", line 890, in <module>
        main()
      File "D:baidu1218.py", line 822, in main
        i = fetchEntry(permalink, mode)
      File "D:baidu1218.py", line 384, in fetchEntry
        tit_str = temp.string.strip()
    AttributeError: 'NoneType' object has no attribute 'strip'

    对应的是:
        #title
        temp = soup.findAll(attrs={"class":"tit"})[1]
        if temp :
            tit_str = temp.string.strip()//对应这一行
            tit_no_unicode = replaceUnicodeNumbers(tit_str)
            tit_xml_safe = saxutils.escape(tit_no_unicode)
            i['title'] = tit_xml_safe
    zhyjp12年前 (2011-12-19)回复
    • 请把你运行脚本所输入的,类似于:hi-baidu-mover_v2011-12-18.py -s http://hi.baidu.com/recommend_music/,的命令内容贴出来,以便于我去调试找出问题所在。

      注:希望以后提问题的时候,把必须的信息补全。谢谢。

      crifan12年前 (2011-12-19)回复
    • 不好意思,我之前是有贴一些说明的,可能是评论长度限制,没有最后一段文字没有了,我截一个完整的发到你邮箱里吧
      zhyjp12年前 (2011-12-20)回复
89 queries in 0.177 seconds, using 22.24MB memory