BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #2139同步于 2014/7/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

抓取论坛版面历史最火帖

heamon7
2014/7/28镜像同步53 回复
LZ这两天学Python,准备找个东西练练手,之前一直又有到论坛某些版面掘坟的习惯,深受扒版之痛,于是就想到做一个爬论坛版面库存中的优质帖的脚本,于是在花了一下午挣扎着写了一个初稿,于是想贴在这儿做做纪念,说不定还可以顺便给以后学弟学妹们做个参考 一个函数都没写 ,代码结构有点混乱,之后再改改,另外得到的结果基本没有UI,后期还需要处理美化一下,功能也不够丰富,后期一定补上,字符编码还不知道怎么搞定,bug也有不少,大家发现了,可以提出来,下面上图: 代码: #encoding='GB2312' import requests import os i=1 print '本脚本可以帮助您筛选某个版面历史上人气最旺的部分帖子,并部分保存在本地,请按下面提示操作'+'\n' board = raw_input('请直接输入您所选择查询的版面的英文完整名称,例如:"Python","StudyShare": ') PAGE=int(raw_input('请输入您想查询的页数,一页代表最新的30篇帖子,为了爱护论坛的服务器,强烈建议您不要经常超过 10页(300篇啊): ')) REPLY=int(raw_input('请输入希望筛选回复数超过多少的帖子,为了爱护论坛的服务器,强烈建议您不要低于20: ')) ROW=30 bourl = "http://bbs.byr.cn/board/" + board +"?p=" filepath= 'bbs.byr.cn/article_ranklist/' + board +'/' headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate, compress', 'Accept-Language': 'en-us;q=0.5,en;q=0.3', 'Cache-Control': 'max-age=0', 'Connection': 'keep-alive', 'X-Requested-With': 'XMLHttpRequest', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36' } if os.path.exists(filepath): pass else: os.makedirs(filepath) if(int(PAGE)>=20): PAGE=20 if(int(REPLY)<=20): REPLY=20 while i <= PAGE: bbourl = bourl + str(i) print bbourl print '--------------------------' bbocont =requests.get(bbourl,headers=headers).content ptrh = bbocont.find('<td class="title_8') ptrt = bbocont.find(r'</td></tr>',ptrh) articleurl = ['']*ROW titlelist = ['']*ROW replylist = ['']*ROW j=0 while(ptrh!= -1 and ptrt!=-1 and j<=ROW): ptitle_11htmp = bbocont.find(r'title_11 middle',ptrh) ptitle_11h = bbocont.find(r'">',ptitle_11htmp) #print ptitle_11h ptitle_11t = bbocont.find(r'</td>', ptitle_11h) #print ptitle_11t replyamnt = bbocont[ ptitle_11h + len('">') : ptitle_11t ] #print replyamnt if(int(replyamnt)>=REPLY): ptitle_9h = bbocont.find(r'<a href="',ptrh) #print ptitle_9h ptitle_9t = bbocont.find(r'">', ptitle_9h) #print ptitle_9t articleurl[j] = bbocont[ ptitle_9h + len('<a href="') : ptitle_9t ] #print arturl ptitlet = bbocont.find(r'</a>', ptitle_9t) titlelist[j]= bbocont[ ptitle_9t + len('">') : ptitlet ] replylist[j]=replyamnt artipages = round((int(replylist[j])+1+5)/10) artipaurltmp='http://bbs.byr.cn'+articleurl[j]+'?p=' n=1 while(n<=artipages): artipaurl= artipaurltmp +str(n) articont = requests.get(artipaurl,headers=headers).content open(filepath+replylist[j]+'_'+titlelist[j]+'.html','a').write(artipaurl+'<br><br>') print 'Downloading page: '+artipaurl pcwh = articont.find(r'<div class="a-content-wrap">') pcwt = articont.find(r'<font class=',pcwh) NANU=10 k=0 namecont = articont[pcwh + len('<div class="a-content-wrap">') : pcwt] while(pcwh!=-1 and pcwt!=-1 and namecont!=-1 and k<NANU): open(filepath+replylist[j]+ '_' + titlelist[j] + '.html','a').write(namecont+'<br><br>') pcwh = articont.find(r'<div class="a-content-wrap">',pcwt) pcwt = articont.find(r'<font',pcwh) namecont = articont[pcwh + len('<div class="a-content-wrap">') : pcwt] k +=1 n +=1 ptrh = bbocont.find('<td class="title_8',ptrt) ptrt = bbocont.find(r'</td></tr>',ptrh) j +=1 i +=1 print 'Completed!'
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
wangxiaobupt机器人#1 · 2014/7/28
感谢分享
heamon7机器人#2 · 2014/7/28
还是小白,共同进步[ema4] 【 在 wangxiaobupt (XJ|学习考研|热点公告屯田日久,当建奇功) 的大作中提到: 】 : 感谢分享 通过『我邮2.0』发布
wangxiaobupt机器人#3 · 2014/7/28
可以再做个抓某个版的精华帖 把所有加蓝钻的 黄钻的 金钻的 抓出来,保存到本地。 从 技术版 、学习交流、 考研版 抓来的精华帖 能得到很多有用的消息哦。 【 在 heamon7 的大作中提到: 】 : 还是小白,共同进步 : : 通过『我邮2.0』发布
heamon7机器人#4 · 2014/7/28
【 在 wangxiaobupt 的大作中提到: 】 : 可以再做个抓某个版的精华帖 把所有加蓝钻的 黄钻的 金钻的 抓出来,保存到本地。 : 从 技术版 、学习交流、 考研版 抓来的精华帖 能得到很多有用的消息哦。 : 恩恩,想法很好,试试!
heamon7机器人#5 · 2014/7/28
【 在 wangxiaobupt 的大作中提到: 】 : 可以再做个抓某个版的精华帖 把所有加蓝钻的 黄钻的 金钻的 抓出来,保存到本地。 : 从 技术版 、学习交流、 考研版 抓来的精华帖 能得到很多有用的消息哦。 : 哇塞,才发现,蓝钻了,谢了哦![ema25]
Chon机器人#6 · 2014/7/28
我曾经试过把每天的十大帖及其回复都定时抓取下来,并且保存各个历史版本,这样就不用担心帖子被修改之后看不到内容了。。。 结果负载太高,只好停止抓取。
heamon7机器人#7 · 2014/7/28
负载太高是什么意思啊?你的机器还是服务器? 被修改。。。 【 在 Chon (葱先森) 的大作中提到: 】 : 我曾经试过把每天的十大帖及其回复都定时抓取下来,并且保存各个历史版本,这样就不用担心帖子被修改之后看不到内容了。。。 : 结果负载太高,只好停止抓取。 通过『我邮2.0』发布
Chon机器人#8 · 2014/7/28
我的服务器,占用大量带宽和磁盘资源。。。 【 在 heamon7 的大作中提到: 】 : 负载太高是什么意思啊?你的机器还是服务器? : 被修改。。。 : : ...................
Mirage0506机器人#9 · 2014/7/28
酒楼?楼主是昨天十大问python问题的孩纸吧?顺便问下,楼主大几啊? 【 在 heamon7 (天堂的呼唤) 的大作中提到: 】 : LZ这两天学Python,准备找个东西练练手,之前一直又有到论坛某些版面掘坟的习惯,深受扒版之痛,于是就想到做一个爬论坛版面库存中的优质帖的脚本,于是在花了一下午挣扎着写了一个初稿,于是想贴在这儿做做纪念,说不定还可以顺便给以后学弟学妹们做个参考 : 一个函数都没写 ,代码结构有点混乱,之后再改改,另外得到的结果基本没有UI,后期还需要处理美化一下,功能也不够丰富,后期一定补上,字符编码还不知道怎么搞定,bug也有不少,大家发现了,可以提出来,下面上图: : [upload=1][/upload] : ................... 通过『我邮2.0』发布