失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python模拟淘宝登录后上下架商品_Python 淘宝系列(三): 模拟登陆成功后获取购物车信息...

python模拟淘宝登录后上下架商品_Python 淘宝系列(三): 模拟登陆成功后获取购物车信息...

时间:2024-05-09 08:31:05

相关推荐

python模拟淘宝登录后上下架商品_Python 淘宝系列(三): 模拟登陆成功后获取购物车信息...

依然采用IE的F12开发者工具分析抓取到的数据。

关键问题

获取token后,重定向地址的获取

一般网站登录成功后,跳转方式主要有两种:(1)服务器返回的响应头中包含 location header,该header为重定向地址,获取该header内容,访问即可。(2)服务器返回的响应内容中,包含使用javascript方法生成的重定向地址,使用正则表达式获取window.location.replace("redirected URL")内容。

然而,这两种方式都不能获取淘宝的重定向地址。经分析,想拿到淘宝中的个人数据要分三步:(1)淘宝登录,获取token值。(2)根据获取的token值,得到st值。(3)根据获得到的st值,获取重定向地址。

获取个人相关信息

获得重定向地址后,后面的事情就简单多了。打开重定向地址,从返回的html信息中提取相应的地址信息即可。

分析过程

下面红线圈出的是比较重要的信息。需要仔细分析。第一个POST方法是提交登录参数,返回参数中包含token值,那么下面紧跟着的GET方法作用是什么呢?还记得上面提到说要获取淘宝个人数据分三步吧?没错!下面两个分别是获得st值及重定向地址

再来看看第一个GET方法的详细信息,可看到传递的参数中有token值

其响应信息如下,一段js脚本

接着,看第二个GET请求的详细信息,地址中包含刚刚得到的st值及其他参数值

其响应如下,返回值包含一个url

对比发现,与下面打开的url一致,即为重定向地址。

完整代码

# -*- coding:

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

importurllib

importurllib2

importcookielib

importre

#登录地址

tbLoginUrl="/member/login.jhtml"

checkCodeUrl=''

#post请求头部

headers={

'x-requestted-with':'XMLHttpRequest',

'Accept-Language':'zh-cn',

'Accept-Encoding':'gzip,deflate',

'ContentType':'application/x-www-form-urlencoded;chartset=UTF-8',

'Host':'',

'DNT':1,

'Cache-Control':'no-cache',

'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64;rv:14.0)Gecko/0101Firefox/14.0.1',

'Referer':'/member/login.jhtml?redirectURL=http%3A%2F%%2F',

'Connection':'Keep-Alive'

}

#用户名,密码

username=raw_input("Pleaseinputyourusernameintaobao:")

password=raw_input("Pleaseinputyourpasswordoftaobao:")

#请求数据包

postData={

'TPL_username':username,

'TPL_password':password,

"need_check_code":"false",

"loginsite":0,

"newlogin":1,

'TPL_redirect_url':'',

'from':'tbTop',

'fc':"default",

'style':'default',

'css_style':'',

'tid':'',

'support':'000001',

'CtrlVersion':'1,0,0,7',

'loginType':3,

'minititle':'',

'minipara':'',

"umto":"NAN",

'pstrong':2,

'llnick':'',

'sign':'',

'need_sign':'',

"isIgnore":'',

"full_redirect":'',

'popid':'',

'callback':'1',

'guf':'',

'not_duplite_str':'',

'need_user_id':'',

'poy':'',

'gvfdcname':10,

'from_encoding':'',

"sub":'',

"allp":'',

'action':'Authenticator',

'event_submit_do_login':'anything',

'longLogin':0

}

#登录主函数

defloginToTaobao():

#cookie自动处理器

globalcheckCodeUrl

cookieJar=cookielib.LWPCookieJar()#LWPCookieJar提供可读写操作的cookie文件,存储cookie对象

cookieSupport=urllib2.HTTPCookieProcessor(cookieJar)

opener=urllib2.build_opener(cookieSupport,urllib2.HTTPHandler)

urllib2.install_opener(opener)

#打开登陆页面

taobao=urllib2.urlopen(tbLoginUrl)

resp=taobao.read().decode("gbk")

displayCookies(cookieJar)

#提取验证码地址

pattern=r'imgid="J_StandardCode_m"src="/apps/login/static/img/blank.gif"data-src="(\S*)"'

checkCodeUrlList=re.findall(pattern,resp)

checkCodeUrl=checkCodeUrlList[0]

print"checkCodeUrl:",checkCodeUrl

#此时直接发送post数据包登录

result=sendPostData(tbLoginUrl,postData,headers)#此时默认不需要输入验证码

print"result:",result

while(notresult["state"]):

print"failedtologinin,errormessage:",result["message"]

ifresult["code"]=="3425"orresult["code"]=="1000":

getCheckCode(checkCodeUrl)

result=sendPostData(tbLoginUrl,postData,headers)

print"result:",result

print"successfullyloginin!"

#获取st值

url="/mini_apply_st.js?site=0"

url=url+"&token="+result["token"]+"&callback=vstCallback519"

text=urllib2.urlopen(url).read()

printtext

displayCookies(cookieJar)

st=re.search(r'"st":"(\S*)"(|})',text).group(1)

printst

#获取重定向地址

myTaobaoUrl="/member/vst.htm?"

myTaobaoUrl=myTaobaoUrl+"st="+st+"&"+"TPL_uesrname=sunecho307"

myTaobao=urllib2.urlopen(myTaobaoUrl)

printmyTaobao.read()

displayCookies(cookieJar)

defdisplayCookies(cookiejar):

print"+"*20+"displayCookies"+"+"*20

forcookieincookiejar:

printcookie

defsendPostData(url,data,header):

print"+"*20+"sendPostData"+"+"*20

data=urllib.urlencode(data)

request=urllib2.Request(url,data,header)

response=urllib2.urlopen(request)

#url=response.geturl()

text=response.read().decode("gbk")

info=response.info()

status=response.getcode()

response.close()

printstatus

printinfo

print"Response:",text

result=handleResponseText(text)

returnresult

defhandleResponseText(text):

"""处理登录返回结果"""

print"+"*20+"handleResponseText"+"+"*20

text=text.replace(',','')

responseData={"state":False,

"message":"",

"code":"",

"token":""}

m1=re.match(r'\{?"state":(\w*)\',text)

ifm1isnotNone:

s=m1.group(1)

ifs=="true":

responseData["state"]=True

#提取token

m4=re.search(r'"token":"(\w*)"(|})',text)

ifm4isnotNone:

responseData["token"]=m4.group(1)

else:

m2=re.search(r'"message":"(\S*)"(|})',text)

ifm2isnotNone:

msg=m2.group(1)

responseData["message"]=msg

else:

print"failedtogettheerrormessage"

m3=re.match(r'.+\"code":(\w*)\',text)

ifm3isnotNone:

code=m3.group(1)

responseData["code"]=code

else:

print"failedtogettheerrorcode"

returnresponseData

defgetCheckCode(url):

print"+"*20+"getCheckCode"+"+"*20

response=urllib2.urlopen(url)

status=response.getcode()

picData=response.read()

path="C:\\Users\\Echo\\Desktop\\checkcode.jepg"

ifstatus==200:

localPic=open(path,"wb")

localPic.write(picData)

localPic.close()

print"请到%s,打开验证码图片"%path

checkCode=raw_input("请输入验证码:")

printcheckCode,type(checkCode)

postData["TPL_checkcode"]=checkCode

postData["need_check_code"]="true"

else:

print"failedtogetCheckCode,status:",status

if__name__=="__main__":

loginToTaobao()

总结

在前两篇的基础上,增加了一些功能:(1)验证码输入错误,可以重复输入(2)获取淘宝中的个人相关信息,目前还不完善,只能得到登录后页面的html信息,相关信息还未提取,后面补充。

如果觉得《python模拟淘宝登录后上下架商品_Python 淘宝系列(三): 模拟登陆成功后获取购物车信息...》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。