python 登录人人网

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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的基本用法。下面给出登录人人网的基本代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# -*- 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  方法处理的事情了。

你可能感兴趣的:(python)