一直想做一个自动读取RSS,自动更新的站。今晚正好没有事,先写个Demo。
临时先保存到文本文件中。顺便复习一下Python。
用到了MD5,XML.DOM,URllib,OS库,都是默认的。
直接插代码吧。
import sys
#coding=gb2312
reload(sys)
sys.setdefaultencoding('utf-8')
import md5
import os
import urllib
import xml.dom.minidom as xxs
#Config
tmpPath='E:/Else/rss-engins/'
#FileName2Md5
def md5str(t):
h=md5.new()
h.update(t)
return str(h.hexdigest())
#FileSystem
def saveFile(t,c):
f='data/'+md5str(t)+'.txt'
if os.path.isfile(f):
return
fi=open(tmpPath+'index.txt','a')
fi.writelines(t+'\n')
fg=open(tmpPath+f,'w')
fg.writelines(c)
#RSS
def saveRss(f,c,encoding):
fp=open(f,'w')
if encoding=='gb2312':
c=c.decode('gb2312').encode('utf-8')
c=c.replace('encoding="gb2312"','encoding="utf-8"')
fp.writelines(c)
fp.close()
return f
def getRss(url):
ul=urllib.urlopen(url)
t=ul.read()
ul.close()
return t
def rssMain(url,encoding):
f=tmpPath+'xml/'+md5str(url)+'.xml'
if os.path.isfile(f):
return "isok"
return saveRss(f,getRss(url),encoding)
#getInfo
def getRssInfo(url,encoding):
t=rssMain(url,encoding)
if t=='isok':
print '该路径已经采集过了。'
return
t=xxs.parse(t)
ri=t.getElementsByTagName("channel")[0].getElementsByTagName("item")
for item in ri:
title=str(item.getElementsByTagName("title")[0].childNodes[0].data)
content=str(item.getElementsByTagName("description")[0].childNodes[0].data)
print '保存文章('+title+')中...'
saveFile(title,content)
#处理
def BaiduHi(RS):
for rs in RS:
print '加载用户:'+rs+'(http://hi.baidu.com/'+rs+'/rss)...'
getRssInfo(r'http://hi.baidu.com/'+rs+'/rss','gb2312')
print '用户:'+rs+'处理完毕。\n'
def SohuBlog(RS):
for rs in RS:
print '加载用户:'+rs+'(http://'+rs+'.blog.sohu.com/rss)...'
getRssInfo(r'http://'+rs+'.blog.sohu.com/rss','utf-8')
print '用户:'+rs+'处理完毕。\n'
#RSS服务器列表
RssServer=['mqycn','yilin','loveinmyhome','guojing021','900ip','037123']
BaiduHi(RssServer)
RssServer=['appler969','saber-bing','02040229','seahai','satanqueen','douzwang']
SohuBlog(RssServer)
现在就可以采集以上一个百度hi用户的最新博文了。呵呵,核心还是RSS。
===============================================================
使用说明:读取RSS,并生成记录到本地。
索引文件为index.txt。每条新闻记录为一行。对应的内容文件为data/{md5(文章名)}.txt
===============================================================
更新日期:2009-12-13
添加了是否读取的判断,如果读取,则不再采集
===============================================================
更新日期:2009-12-24
修改了部分编码。解决了UTF-8出粗的问题。
添加了搜狐博客的测试代码。