您的位置:首页 > 编程语言 > Python开发

python模拟浏览器登陆人人网站

2015-04-25 16:57 721 查看
想要实现网站的登陆,post方法就是提交数据到网站,所以要post数据来用python实现登陆。当你想要登陆人人时,首先要知道网站的登陆细节(先发送账号和密码,返回cookie值,发送cookie到服务器,返回页面,再使用正则提取你想要的数据),我是通过HTTPfox来抓取http数据包来分析这个网站的登陆流程。同时,我们还要分析抓到的post包的数据结构和header,要根据提交的数据结构和heander来构造自己的post数据和header。

分析结束后,我们要构造自己的HTTP数据包,并发送给指定url。我们通过urllib2等几个模块提供的API来实现request请求的发送和相应的接收。大部分网站登录时需要携带cookie,所以我们还必须设置cookie处理器来保证cookie。具体httpfox的使用可以通过定制来将其加入到工具栏,之后它出现在右上角直接点击就可以了,或者使用快捷键Ctrl+Shift+F2。

实现登陆人人还是比较简单的,淘宝就有了一点难度,因为淘宝有验证码和它自己的post格式,明天再写淘宝的登陆,跪求大牛带走啊。

#-*- coding:utf-8 -*-
import sys
import re
import urllib2
import urllib
import requests
import cookielib

loginurl = 'http://www.renren.com/PLogin.do'
logindomain = 'renren.com'
"""
    当我们使用urllib处理url的时候,实际上是通过urllib2.OpenerDirector实例进
    
行工作,他会自己调用资源进行各种操作如通过协议、打开url、处理cookie等。而urlopen

方法使用的是默认的opener来处理问题,基本的urlopen()函数不支持验证、cookie或其他

的HTTP高级功能。要支持这些功能,必须使用build_opener()函数来创建自己的自定义Opener对象。
"""
class Login(object):
    def __init__(self):
        self.name = ''
        self.passwprd = ''
        self.domain = ''
        #更改默认的opener,因为默认的opener没有处理cookie的功能。
        self.cj = cookielib.LWPCookieJar()
        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj))
        urllib2.install_opener(self.opener)
        
    def setLoginInfo(self,username,password,domain):
        '''''设置用户登录信息'''
        self.name = username
        self.pwd = password
        self.domain = domain
        
    def login(self):
        '''''登录网站'''
        loginparams = {'domain':self.domain,'email':self.name, 'password':self.pwd}
        headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1'}
        req = urllib2.Request(loginurl, urllib.urlencode(loginparams),headers=headers)
        response = urllib2.urlopen(req)
        self.operate = self.opener.open(req)
        thePage = response.read()
        print thePage

        
if __name__ == '__main__':
    print loginurl #测试
    userlogin = Login()
    #username = '账号'
    #password = '密码'
    #可以自己指定,也可以实时输入。
    username = raw_input("Please input your username in renren: ")
    password = raw_input("Please input your password of renren: ")
    domain = logindomain
    userlogin.setLoginInfo(username,password,domain)
    userlogin.login()
    print loginurl #测试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: