初学Python有了一段时间,寒假里又看了一些Web编程方面的知识,就写了一个实现bbs自动登录和发帖的Python脚本

由于本人学校BBS站首页使用js加载,貌似通过首页登录不大可行,然后就分析表单,发现是通过POST一些data到特定的地址,之后

获取返回的cookie。这样就好办了,废话不多说,上代码。(初学,不够 Pythonic,见谅)

 

[python] view plaincopy
 
  1. #-*-coding:utf-8-*-  
  2. #lilybbs.py  
  3. #Author:Sky_Money  
  4. #Python实现自动登录BBS并发帖  
  5.   
  6. import urllib,urllib2  
  7.   
  8. #帐号和密码,你懂的  
  9. username=''  
  10. password=''  
  11.   
  12. baseurl='http://bbs.nju.edu.cn/vd45734/bbslogin?type=2'  
  13. postdata=urllib.urlencode({  
  14.     'id':username,  
  15.     'pw':password,  
  16.     'lasturl':''})  
  17. req=urllib2.Request(  
  18.     url=baseurl,  
  19.     data=postdata)  
  20. result=urllib2.urlopen(req).read()  
  21.   
  22. #从返回的Content中抓取Cookie  
  23. start=result.find("('")+2  
  24. end=result.find("')")  
  25. cookie=result[start:end]  
  26.   
  27. split1=cookie.find('N')  
  28. split2=cookie.find('+')  
  29.   
  30. u_num=int(cookie[0:split1])  
  31. u_id=cookie[split1+1:split2]  
  32. u_key=int(cookie[split2+1:])  
  33. footkey=217872412  
  34.   
  35. #下面是发帖验证  
  36. testUrl='http://bbs.nju.edu.cn/vd78013/bbssnd?board=test'  
  37.   
  38. sendCookie="_U_NUM=%d;_U_UID=%s;_U_KEY=%d;FOOTKEY=%d"%(u_num+2,u_id  
  39.                                                        ,u_key-2,footkey)  
  40. #发送的Headers,必须要有Cookie  
  41. sendheaders = {  
  42.         'Host''bbs.nju.edu.cn',  
  43.         'Connection''keep-alive',  
  44.         'User-Agent''Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML,like Gecko) Chrome/15.0.874.121 Safari/535.2',  
  45.         'Accept''text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',  
  46.         'Accept-Encoding''gzip,deflate,sdch',  
  47.         'Accept-Language''zh-CN,zh;q=0.8',  
  48.         'Accept-Charset''GBK,utf-8;q=0.7,*;q=0.3',  
  49.     }  
  50.   
  51. sendheaders['Cookie']=sendCookie  
  52.   
  53. #发帖的data主体  
  54. body=urllib.urlencode({'title':'test',  
  55.       'pid':'0',  
  56.       'reid':'0',  
  57.       'signature':'1',  
  58.       'autocr':'on',  
  59.       'text':'oh yeah'})  
  60. returnedReq=urllib2.Request(  
  61.     url=testUrl,  
  62.     data=body,  
  63.     headers=sendheaders)  
  64. returnedResult=urllib2.urlopen(returnedReq).read()  
  65. print returnedResult  

 

 

代码一路到底,比较丑,就这样看看了

主要使用了urllib和urllib2模块。

先是登录问题,需要POST的数据可以通过FF+httpfox查看,这个比较方便。知道需要的数据之后就依样画葫芦,模拟发送即可。

其中发送的url中 /vd 后面跟的一串数字就是随机指派,这个其实可以通过随机数分配,没有特定的要求.

之后通过抓取发送得到的Cookie获取发帖‘令牌’,其中Cookie分为四部分,_U_NUM,_U_UID,_U_KEY,FOOTKEY,其中 _U_UID是用户名,_U_NUM和_U_KEY是返回的一串数值,需要注意的是,发帖是的Cookie需要将 _U_NUM值加2,_U_KEY值减2,这个比较奇怪,可能是本校bbs设置的问题。FOOTKEY貌似就是随意指派的一串数字。

 

以上就是自动登录并发帖的简单脚本,现在发现Python写这玩意还是挺好玩,接下来想考虑怎么登录WebQQ,这个貌似需要了解TX的QQ通讯协议了....

posted on 2014-05-04 13:55  知识天地  阅读(818)  评论(1编辑  收藏  举报