python 登录人人网。。。

对于社交网络的爬虫,有一个很大的问题就是处理登陆。对于认证模块,有很多方法,获取cookie伪装成为浏览器。再或者调用第三方网站API,进行 Oauth认证。

下面针对 renren 网,通过使用 cookie 方式登录。

python 有一个标准模块 cookielib。里面有一个 CookieJar类,可以生成一个获取远程cookie的对象实例。 用法如下

import cookielib

# 获取一个cookie对象
cookie = cookielib.CookieJar()
# 构建cookie处理器
cookie_Hp = urllib2.HTTPCookieProcessor(cookie)
# 装在 cookie
opener = urllib2.build_opener(cookie_Hp)
# 发送请求
response = opener.open(‘http://www.baidu.com’)

# 查看请求之后的 cookie
for i in cookie:
print ‘name’, i.name
print ‘value’, i.value

上面代码就是 cookie的基本用法。下面给出登录人人网的基本代码

# -*- coding: utf-8 -*-

import urllib2, urllib, cookielib, re

class LoginRenren(object):

“”"登陆人人构造器”"”

def __init__(self, email, password):

self.email = email
self.password = password
self.domain = ‘renren.com’
self.logined_url = ”
self.logined_url_re = r’http://www.renren.com/\d{9}’
self.islogin = False

try:
# 获取构建cookie
cookie = cookielib.CookieJar()
cookieProc = urllib2.HTTPCookieProcessor(cookie)
except:
raise
else:
#装载cookies
opener = urllib2.build_opener(cookieProc)
urllib2.install_opener(opener)

def login(self):

“”"登陆方法”"”

print ‘login…’
# 登陆地址
url=’http://www.renren.com/PLogin.do’
# post数据
postdata = {
‘email’: self.email,
‘password’: self.password,
‘domain’: self.domain
}
# 编码登陆的post数据
data = urllib.urlencode(postdata)
# 构造请求
req = urllib2.Request(
url,
data
)
# 发送请求,获取响应
# response = opener.open(req)
response = urllib2.urlopen(req)
# 登陆后的url
self.logined_url = response.geturl()

# 判断登陆是否成功
self.__isLogin()
if self.islogin == True:
print u’登陆成功 !’
self.__getStatus()
else:
print u’登录失败,请重试 !’

def __isLogin(self):

“”"判断登陆是否成功”"”

if re.search(self.logined_url_re, self.logined_url) != None:
self.islogin = True

def __getStatus(self):
pass

if __name__ == ‘__main__’:

# 请输入您的用户名
EMAIL = raw_input(u’email:’)
# 请输入您的密码
PASSWORD = raw_input(u’password:’)

lr = LoginRenren(EMAIL, PASSWORD)
lr.login()

这个方法还有一个问题,就是有时候会会出现验证码问题。我采用的 hack 手段就是用浏览器登录一次。然后多运行几次这个程序,就能登陆,至于登陆之后做点什么,就是 __getStatus 方法处理的事情了。

Top Down