zoukankan      html  css  js  c++  java
  • Python实现BBS自动登录并发帖

    初学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通讯协议了....

  • 相关阅读:
    eclipse- DDMS截图功能使用
    宏-新项目物理按键不能用
    宏-宏的添加跟代码中的使用
    SQlite-数据库的访问实例(转)
    git 工具的使用总结(6)-提交合并处理
    git 工具的使用总结(5)-查看历史记录
    git -处理分支合并
    Linux查询网址
    SQLite常用网址
    Java查询网址
  • 原文地址:https://www.cnblogs.com/mfryf/p/3706692.html
Copyright © 2011-2022 走看看