想要实现网站的登陆,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 #测试