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

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

这一次选择百度来~

战前准备

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

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

postData

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

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

百度登陆token

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

 

最终代码

# -*- 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模拟登陆

 

本博客若无特殊说明则由 hrwhisper 原创发布
转载请点名出处:细语呢喃 > python 爬虫之模拟登陆实战(二)百度
本文地址:https://www.hrwhisper.me/python-web-crawler-login-baidu/

您的支持将鼓励我继续创作!

python learning, 学习 , . permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *