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里呢? 自己想的一个方法是写个脚本采用邮件发布的方式弄过去, 不过估计效果不是太好,