0%

python 爬虫之模拟登陆实战(二)百度

好了,上一次的登陆微人大让我们有了很好的经验,虽然那系统比较水。

这一次选择百度来~

战前准备

打开百度登陆页面https://passport.baidu.com/v2/?login

首先进行一次正常的登陆,看看postData都有什么。(下面这张图是我用火狐浏览器插件httpfox得到的,用fiddler2也可以)

postData

发现又有个token值,首先我们要知道这个值是怎么被设置的。

经过fiddler2发现,登录前,会访问一个网址(在下面的程序中有,url_token),在response中返回一个json格式的,包含有token的值。

百度登陆token

需要注意的是,百度需要进行伪装头部,至于头部怎么伪装,用fiddler抓下你正常登陆时候的头部,一一模仿即可。

最终代码

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
# -*- coding: utf8 -*-
# author: hrwhisper
# blog : hrwhisper.me
# date : 2015.5.3

import requests
import urllib
import urllib2
import re
import cookielib

class baiduLogin:
url_token = 'https://passport.baidu.com/v2/api/?getapi&tpl=pp&apiver=v3&tt=1426660772709&class=login&logintype=basicLogin&callback=bd__cbs__hif73f'
url_login = 'https://passport.baidu.com/v2/api/?login'
url_tieba = 'http://tieba.baidu.com/f/like/mylike?v=1387441831248'
s = requests.Session()

def startLogin(self,username,password):
#urllib2.install_opener(self.opener)
postData = {
'username' : username,
'password' : password,
'token' : self.getToken(),
'charset' : 'UTF-8',
'apiver' : 'v3',
'isPhone' : 'false',
'tpl' : 'pp',
'u' : 'https://passport.baidu.com/',
'staticpage' : 'https://passport.baidu.com/static/passpc-account/html/v3Jump.html',
'callback' : 'parent.bd__pcbs__ra48vi'
}

myhead={
'Host': 'passport.baidu.com',
'Referer': 'https://passport.baidu.com/v2/?login',
'Connection': 'keep-alive',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36' ,
}
self.s.post(self.url_login,data=postData,headers=myhead)


def getToken(self):
r = self.s.get(u'http://www.baidu.com/')
r = self.s.get(self.url_token)
#取个别名并且从分组中取出token
token = re.search(u'"token" : "(?P<token>.*?)"',r.text)
return token.group('token')

def getMyTieBa(self):
tieba = self.s.get(self.url_tieba)
tieba.encoding = 'gbk'
print tieba.text

username = ''
password = ''
baidu = baiduLogin()
baidu.startLogin(username, password)
baidu.getMyTieBa()


 

Python爬虫系列教程

python 爬虫 入门

python模拟登陆

请我喝杯咖啡吧~