zoukankan      html  css  js  c++  java
  • Python小练习自动登录人人发送消息并返回好友列表

    主要是由urllib,urllib2,cookielib这三个模块。对这三个标准库不熟悉可以学习一下,我也不是很熟系,练习一下。

    比如  urllib2 - The Missing Manual

             cookielib and ClientCookie 

    主要就是模拟人人登录,通过httpfox抓包来对登录网站的过程进行分析,将密码和发送的消息post到服务器上就可以,用cookielib模块处理cookie,然后就是正则匹配的问题了。

     1 #!/usr/bin/env python
     2 #coding=utf-8
     3 import urllib
     4 import urllib2
     5 import cookielib
     6 import re
     7 from sgmllib import SGMLParser
     8 from datetime import *
     9 class Loginrenren(SGMLParser): 
    10     friendlist = [] 
    11     header = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0'} 
    12     def __init__(self,username,password):
    13         SGMLParser.__init__(self)
    14         self.username = username
    15         self.password = password
    16         cj = cookielib.CookieJar()
    17         opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    18         urllib2.install_opener(opener)
    19     def login(self):
    20         '''login in and return uid'''
    21         logpage = "http://www.renren.com/Login.do"
    22         data = {'email':self.username,'password':self.password}
    23         login_data = urllib.urlencode(data)
    24         res = urllib2.Request(logpage,login_data)
    25         self.file=urllib2.urlopen(res).read()
    26         idPos = self.file.index("'id':'")
    27         self.uid=self.file[idPos+6:idPos+15]
    28         tokPos=self.file.index("get_check:'")
    29         self.tok=self.file[tokPos+11:tokPos+21]
    30         rtkPos=self.file.index("get_check_x:'")
    31         self.rtk=self.file[rtkPos+13:rtkPos+21]
    32         #html = res.read()
    33         print 'login now...'
    34         print "Getting user id of you now"
    35         res = urllib2.urlopen("http://www.renren.com/home")
    36         html = res.read()
    37         uid = re.search("'ruid':'(\d+)'",html).group(1)
    38         print "login and got uid successfully"
    39         return uid
    40     def getfriendlist(self):
    41         req = urllib2.Request(url='http://friend.renren.com/myfriendlistx.do',headers = self.header)
    42         result = urllib2.urlopen(req).read()
    43         friend = str(re.search('friends=\[{.*}\]',result).group())
    44         friendId = re.findall(r'"id":(.*?),.*?,"name":"(.*?)"',friend)
    45         for f in friendId:
    46             self.friendlist.append(f)
    47             print f[1].decode('unicode-escape')
    48     def postmessage(self,content):
    49         url = "http://shell.renren.com/"+self.uid+"/status"
    50         postdata = {'content':content,
    51                     'hostid':self.uid,
    52                     'requetToken':self.tok,
    53                     '_rtk':self.rtk,
    54                     'channel':'renren',
    55                    }
    56         log_data = urllib.urlencode(postdata)
    57         req2 = urllib2.Request(url,log_data)
    58         self.hax = urllib2.urlopen(req2).read()
    59         print ''+datetime.now().strftime('%Y-%m-%d %H:%M:%S %p')+' 你发送了一条为 "'+content+'" 的消息'
    60 users = Loginrenren('youremailaddress',"yourpassword")
    61 users.login()
    62 users.getfriendlist()
    63 content = raw_input("请输入内容:")
    64 users.postmessage(content)

    requestToken和_rtk不知道怎么求,查的。

    其他不说了,代码不难,忘了谁说的了,代码可以自己解释自己 - -

  • 相关阅读:
    P4855 MloVtry的idea
    CF343D Water Tree
    CF165D Beard Graph
    P3833 [SHOI2012]魔法树
    P2410 [SDOI2009]最优图像 ZKW最大费用最大流
    P2157 [SDOI2009]学校食堂
    P2407 [SDOI2009]地图复原
    P4008 [NOI2003]文本编辑器
    awk里面执行shell命令
    git 系统中 post-receive 钩子不能正常执行 git pull 解决方法
  • 原文地址:https://www.cnblogs.com/timeship/p/2989401.html
Copyright © 2011-2022 走看看