其实是写Java的,但是最近学习Python,于是写了一个Python的简单脚本练手
如何找到SAE上面所有的精华帖子,周末一个人无聊于是研究了一下python的urllib2,下面说下自己收集精华帖子的思路:
1,发送相关模块的请求,生产html信息返回给本地
2,处理html信息,找到可以标示精华帖子的html
3,提取取出href熟悉和<a></a>标签包含的名称
思路很简单,代码也不复杂,下面帖上自己的代码
#! /usr/bin/env python
#coding=utf-8
#Python 2.7
#author:tsface
#date:2014-04-20
#since:1.0
import urllib2
import time
import sys
import re
reload(sys)
sys.setdefaultencoding('utf-8')
#定义常量
BASE_PATH='http://cloudbbs.org/'
_URL='http://cloudbbs.org/forum.php?mod=forumdisplay'
headers ={'User_Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36'}
pageSize=30
FIDS=[41,37,39,40,51,52,57,58,60,63,64,65,54,46,62]
#定义一个用来函数用来读取当前页面的html文档
#since:1.0
def getHtml(url):
realUrl = url
consoleLog('request url: '+realUrl)
req = urllib2.Request(realUrl,headers = headers)
res = urllib2.urlopen(req)
html = res.read().decode('utf-8').encode('gb2312','ignore');
return html
#定义一个函数用来解析当前文档中的精华帖子的url,并且把帖子的类容存储到一个tuple中
def parseExcellentContent(html):
if html:
consoleLog('start parse DOM...')
regDigest = '(<a[^>]*class="xst" >[\\d\\D]*?</a>)'
#找到主题的正则表达是
regContent ='(<th[^>]*class="[\\d\\D].*?">[\\d\\D]*?</th>)'
contentList = re.findall(regContent,html,re.S)
digestList=[]
for item in contentList:
#找到精华帖子
_digest = re.findall('alt="digest"',item,re.S)
if _digest:
_digestContent=re.findall(regDigest,item,re.S)
_href=re.findall('<a href="(.*?)"',_digestContent[0],re.S)
_bbsName=re.findall('<a.*?>(.*?)</a>',_digestContent[0],re.S)
digestList.append({"address":_href[0],"title":_bbsName[0]})
consoleLog('parse successfully...')
return digestList
else:
consoleLog('Nothing to parse')
#写信息到文件中
def writeInfo2File(fileName,info):
_file=open(fileName,'w+')
_file.write(info)
_file.close()
consoleLog(fileName+'has build...')
#定义日志函数
def consoleLog(log):
print '['+getCurrentFormatTime()+']'+log
#获取本地格式化的时间
def getCurrentFormatTime():
return time.strftime("%Y-%m-%d %A %X %Z", time.localtime())
#定义替换特殊字符的函数
def replaceSpecial(_href):
replacedUrl=_href
replaceTab = [("<","<"),(">",">"),("&","&"),("&nbps;"," ")]
for repl in replaceTab:
replacedUrl=replacedUrl.replace(repl[0],repl[1])
return replacedUrl
#获取SAE平台上的精华文章列表
def getSAEBBSExcellentInfo():
info=""
for fid in FIDS:
reqUrl = _URL+'&fid='+str(fid)
for i in range(1,pageSize+1):
_sigleReqUrl=reqUrl+'&page='+str(i)
print _sigleReqUrl
objs = parseExcellentContent(getHtml(_sigleReqUrl))
for obj in objs:
info+=(BASE_PATH+replaceSpecial(obj['address']))+(" "*10)+obj['title']+'\n'
info+=('='*50+str(fid)+'\n')
writeInfo2File('test.txt',info)
#测试
startTime = time.time()
getSAEBBSExcellentInfo()
endTime = time.time()
consoleLog('the py spend '+str(endTime-startTime))
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com