python自动登录百度_使用python模拟登陆百度

本文演示如何使用Python代码模拟登录百度。首先导入所需库,然后使用HTTPCookieProcessor处理cookie,通过访问百度主页获取BAIDUID。接着从特定URL获取token值,最后构造POST数据并发送登录请求。成功登录后,检查特定cookie是否存在来验证登录状态。
摘要由CSDN通过智能技术生成

使用python模拟登陆百度

#!/usr/bin/python

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

import re;

import cookielib;

import urllib;

import urllib2;

import optparse;

#------------------------------------------------------------------------------

# check all cookies in cookiesDict is exist in cookieJar or not

def checkAllCookiesExist(cookieNameList, cookieJar) :

cookiesDict = {};

for eachCookieName in cookieNameList :

cookiesDict[eachCookieName] = False;

allCookieFound = True;

for cookie in cookieJar :

if(cookie.name in cookiesDict) :

cookiesDict[cookie.name] = True;

for eachCookie in cookiesDict.keys() :

if(not cookiesDict[eachCookie]) :

allCookieFound = False;

break;

return allCookieFound;

#------------------------------------------------------------------------------

# just for print delimiter

def printDelimiter():

print '-'*80;

#------------------------------------------------------------------------------

# main function to emulate login baidu

def emulateLoginBaidu():

print "Function: Used to demostrate how to use Python code to emulate login baidu main page: http://www.baidu.com/";

print "Usage: emulate_login_baidu_python.py -u yourBaiduUsername -p yourBaiduPassword";

printDelimiter();

# parse input parameters

parser = optparse.OptionParser();

parser.add_option("-u","--username",action="store",type="string",default='',dest="username",help="Your Baidu Username");

parser.add_option("-p","--password",action="store",type="string",default='',dest="password",help="Your Baidu password");

(options, args) = parser.parse_args();

# export all options variables, then later variables can be used

for i in dir(options):

exec(i + " = options." + i);

printDelimiter();

print "[preparation] using cookieJar & HTTPCookieProcessor to automatically handle cookies";

cj = cookielib.CookieJar();

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));

urllib2.install_opener(opener);

printDelimiter();

print "[step1] to get cookie BAIDUID";

baiduMainUrl = "http://www.baidu.com/";

resp = urllib2.urlopen(baiduMainUrl);

#respInfo = resp.info();

#print "respInfo=",respInfo;

for index, cookie in enumerate(cj):

print '[',index, ']',cookie;

printDelimiter();

print "[step2] to get token value";

getapiUrl = "https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true";

getapiResp = urllib2.urlopen(getapiUrl);

#print "getapiResp=",getapiResp;

getapiRespHtml = getapiResp.read();

#print "getapiRespHtml=",getapiRespHtml;

#bdPass.api.params.login_token='5ab690978812b0e7fbbe1bfc267b90b3';

foundTokenVal = re.search("bdPass\.api\.params\.login_token='(?P\w+)';", getapiRespHtml);

if(foundTokenVal):

tokenVal = foundTokenVal.group("tokenVal");

print "tokenVal=",tokenVal;

printDelimiter();

print "[step3] emulate login baidu";

staticpage = "http://www.baidu.com/cache/user/html/jump.html";

baiduMainLoginUrl = "https://passport.baidu.com/v2/api/?login";

postDict = {

#'ppui_logintime': "",

'charset' : "utf-8",

#'codestring' : "",

'token' : tokenVal, #de3dbf1e8596642fa2ddf2921cd6257f

'isPhone' : "false",

'index' : "0",

#'u' : "",

#'safeflg' : "0",

'staticpage' : staticpage, #http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html

'loginType' : "1",

'tpl' : "mn",

'callback' : "parent.bdPass.api.login._postCallback",

'username' : username,

'password' : password,

#'verifycode' : "",

'mem_pass' : "on",

};

postData = urllib.urlencode(postDict);

# here will automatically encode values of parameters

# such as:

# encode http://www.baidu.com/cache/user/html/jump.html into http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html

#print "postData=",postData;

req = urllib2.Request(baiduMainLoginUrl, postData);

# in most case, for do POST request, the content-type, is application/x-www-form-urlencoded

req.add_header('Content-Type', "application/x-www-form-urlencoded");

resp = urllib2.urlopen(req);

#for index, cookie in enumerate(cj):

# print '[',index, ']',cookie;

cookiesToCheck = ['BDUSS', 'PTOKEN', 'STOKEN', 'SAVEUSERID'];

loginBaiduOK = checkAllCookiesExist(cookiesToCheck, cj);

if(loginBaiduOK):

print "+++ Emulate login baidu is OK, ^_^";

else:

print "--- Failed to emulate login baidu !"

else:

print "Fail to extract token value from html=",getapiRespHtml;

if __name__=="__main__":

emulateLoginBaidu();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值