Blogspot 似乎有一周多的时间可以正常访问了...


               
于是乎开始准备搬家的工作….
   上次用python写了一点从CU上导出文章的脚本, 不过有些问题, 当时又因为blogspot又被封了, 所以就停下来没写. 昨天晚上来了兴致,
便又继续写了起来.
   首先是用脚本取得CU上的网页的问题,
在用firefox打开我的blog的时候实际上得到的是一个xml格式的文档, xml的一个好处就是好解析啊. 可是在代码里用urllib.urlopen(…)的时候得到的却是一个html的文本, 很是奇怪,
最后想到一种可能就是使用urllib获取网页的时候实际上少了用浏览器发送http请求时的头信息, 于是google一下python里的库, 有一个httplib, 可以发送请求.
它的大致使用是:
conn =
httplib.HTTPConnection("blog.chinaunix.net:80")
    conn.request("GET",
url,"", headers)
    response = conn.getresponse ()
    其中的headers就是你所要发送的http头的map.
    但是我在用python的交互式环境调试的时候,
第二行总是通不过, 说是无法请求, 后来直接写在代码里却又没有问题,
然后自己恍然大悟, httpconnection 是在第一行的时候打开的, 交互的时候, 人的反应时间很慢,
当你再次发送response的时候, 原来那个connection已经被关掉了…. Orz…
    知道需要在请求的时候发送http头, 可是如何知道firefox在请求的时候会发送什么样的头呢?
这个只要google一下”browser http header”, 就能找到相关的网页列出你的浏览器发送的头信息了(其实这个的实现代码也没有几行, 不过又何必再发明轮子~~),
我看到的自己的http 头是这样的:
Name                  Value
connection            keep-alive
accept-language        zh-cn,en;q=0.5
content-length        0
host                  www.ericgiguere.com
accept-encoding       gzip,deflate
accept               text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
accept-charset       GB2312,utf-8;q=0.7,*;q=0.7
keep-alive            300
user-agent           Mozilla/5.0 (X11; U; Linux i686;
en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
  
   这里我选取了几个有用的user-agent,
accept, accept-language, 我们这里会看到在accept里会有列出可接受的内容格式, 估计CU的服务器会检测你header里的这个字段,
如果发现没有text/xml会直接返回给你html的内容,
这里我把accept-encoding头去掉了, 因为我可不想服务器给我发过来gzip压缩的内容:), 我的header定义成下面的样子
headers = {            "User-Agent":   "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3",            "Accept-Language":      "en-us,en;q=0.5",            "Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"            }
   至于解析xml选择的是用minidom这个包, 感觉比sax要简单些, 虽然内存消耗会大点, 但我的这点文章也占不了多少内存J
   另外还有一个问题就是CU blog的编码方式是采用的gb2312编码, 而minidom对于此类编码支持不好,
在网上找了个解决方法就是先把文件编码转换成utf-8的, 下面是相关代码:
x = re.match('    if x:
        ec = x.group
(2)
        texts =
re.sub(x.group(2), 'utf-8', texts)
        strIO =
StringIO.StringIO(unicode(texts, ec).encode('utf-8'))
    else:
        strIO =
StringIO.StringIO(texts)
  再另外的东西就没啥内容了, 无非是对相关内容的处理,
然后把内容写进自己的文件:), 另外对于图片和文件还没有处理. (昨天为了调这个程序让我的blog的访问里飙升了好几百啊, haha~~)
     这些就基本是我的blog备份工具的重要部分, 至于源代码就不在这贴了, 不然有人会不高兴的:)
    可是怎么能把这些文章再导入到blogspot里呢? 自己想的一个方法是写个脚本采用邮件发布的方式弄过去, 不过估计效果不是太好,