http://my.oschina.net/u/811744/blog/192604(本文的转载地址)

==========================================================
PYTHON 淘宝 主要有两个文章
1 http://my.oschina.net/u/811744/blog/192604(本文的转载地址)
2 http://python.jobbole.com/81361/  Python爬虫实战(5):模拟登录淘宝并获取所有订单
注意本文用的方式 'x-requestted-with': 'XMLHttpRequest'
=================================

依然采用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:

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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# -*- coding: utf-8 -*-
import urllib
import urllib2
import cookielib
import re
#登录地址
tbLoginUrl = "https://login.taobao.com/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':    'login.taobao.com',
    'DNT'1,
    'Cache-Control''no-cache',
    'User-Agent' 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1',  
    'Referer' 'https://login.taobao.com/member/login.jhtml?redirectURL=http%3A%2F%2Fwww.taobao.com%2F',
    'Connection' 'Keep-Alive'
}
#用户名,密码
username = raw_input("Please input your username in taobao: ")
password = raw_input("Please input your password of taobao: ")
#请求数据包
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               
}
#登录主函数
def loginToTaobao():
    #cookie 自动处理器
    global checkCodeUrl
    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'img id="J_StandardCode_m" src="https://s.tbcdn.cn/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(not result["state"]):
        print "failed to login in, error message: ",result["message"]
        if result["code"== "3425" or result["code"== "1000":                 
            getCheckCode(checkCodeUrl)
        result=sendPostData(tbLoginUrl, postData, headers)
        print "result: ", result
    print "successfully login in!"
    #获取st值
    url="https://passport.alipay.com/mini_apply_st.js?site=0"
    url=url+"&token="+result["token"]+"&callback=vstCallback519"
     
    text=urllib2.urlopen(url).read()
    print text
    displayCookies(cookieJar)
    st=re.search(r'"st":"(\S*)"( |})',text).group(1)
    print st
    #获取重定向地址
    myTaobaoUrl="http://login.taobao.com/member/vst.htm?"
    myTaobaoUrl=myTaobaoUrl+"st="+st+"&"+"TPL_uesrname=sunecho307"
    myTaobao = urllib2.urlopen(myTaobaoUrl)
     
    print myTaobao.read()
    displayCookies(cookieJar)
def displayCookies(cookiejar):
    print "+"*20+"displayCookies"+"+"*20
    for cookie in cookiejar:
        print cookie
    
def sendPostData(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()
    print status
    print info
    print "Response:", text
    result = handleResponseText(text)
    return result
def handleResponseText(text):
    """处理登录返回结果"""   
    print "+"*20+"handleResponseText"+"+"*20  
    text = text.replace(','' ')   
    responseData = {"state"False,
                    "message" : "",
                    "code" : "",
                    "token" : ""}
     
    m1 = re.match(r'\{?"state":(\w*)\ ', text)
    if m1 is not None:
        = m1.group(1)
        if == "true":
            responseData["state"= True
            #提取token
            m4 = re.search(r'"token":"(\w*)"( |})', text)
            if m4 is not None:
               responseData["token"= m4.group(1
        else:
            m2 = re.search(r'"message":"(\S*)"( |})', text)
            if m2 is not None:
                msg = m2.group(1)
                responseData["message"= msg  
            else:
                print "failed to get the error message"
            m3 = re.match(r'.+\"code":(\w*)\ ', text)
            if m3 is not None:
                code = m3.group(1)
                responseData["code"= code
            else:
                print "failed to get the error code"
    return responseData
def getCheckCode(url):
    print "+"*20+"getCheckCode"+"+"*20
    response = urllib2.urlopen(url)
    status = response.getcode()
    picData = response.read()
     
    path = "C:\\Users\\Echo\\Desktop\\checkcode.jepg"
    if status == 200:
        localPic = open(path, "wb")
        localPic.write(picData)
        localPic.close() 
        print "请到%s,打开验证码图片"%path  
        checkCode = raw_input("请输入验证码:")
        print checkCode, type(checkCode)
        postData["TPL_checkcode"= checkCode
        postData["need_check_code"= "true"
    else:
        print "failed to get Check Code, status:",status
if __name__ == "__main__":   
    loginToTaobao()

总结

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

提示:

上面的代码 有点错误,需要重新修改下 才能用

Python 淘宝系列(三): 模拟登陆成功后获取购物车信息相关推荐

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

    依然采用IE的F12开发者工具分析抓取到的数据. 关键问题 获取token后,重定向地址的获取 一般网站登录成功后,跳转方式主要有两种:(1)服务器返回的响应头中包含 location header, ...

  2. python 淘宝联盟_python模拟登陆阿里妈妈生成商品推广链接

    淘宝官方有获取商品推广链接的API,但该API属于增值API 普通开发者没有调用权限 需要申请开通 备注:登陆采用的是阿里妈妈账号登陆非淘宝账号登陆 代码如下: #coding:utf-8 __aut ...

  3. 淘宝。京东 模拟登陆

    淘宝: >> 两种方法 第一种 (selenium+火狐 +控制鼠标): #! /uer/bin/evn python3 # -*- coding: utf-8 -*- from sele ...

  4. 解决 {ret:100030,msg:this api without user authorization} android QQ第三发登录成功后获取用户信息失败的问题

    在使用QQ第三发登录时,登录成功后,去获取用户信息的时候,却出现这个错误: {"ret":100030,"msg":"this api without ...

  5. 新浪微博开放平台,授权成功后获取用户信息

    最近做的一个ios app中需要用到第三方登录 新浪微博登录平台的sdk demo中没有只有登录和发微博功能,没有获取用户信息,看了一下sdk接口和官方文档,才发现需要发起https请求去获取用户信息 ...

  6. python爬虫 模拟淘宝使用账号密码登陆 用mitmdump防止检测出使用chromedriver

    使用淘宝账号密码模拟登陆淘宝 准备代理 登陆的代码 准备代理 为什么需要代理呢?因为淘宝有检测是否是chromedriver来访问的代码 通过浏览器分析js代码,可以找得到这个文件存在校验逻辑 htt ...

  7. python淘宝_Python模拟登录淘宝

    最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章! 看了下网上有很多关于模拟登录淘宝,但是基本都是使用scrapy.pyppeteer.se ...

  8. php 模拟登录淘宝taobao阿里妈妈|模拟登录淘宝联盟|curl模拟登录淘宝|模拟登陆淘宝采集数据

    php 模拟登录淘宝taobao阿里妈妈|模拟登录淘宝联盟|curl模拟登录淘宝|模拟登陆淘宝采集数据 在很多项目中我们可能要采集淘宝会员中心的一些数据.但是程序采集的时候会员中心必须是登录的,这里我 ...

  9. 零基础:Python之Selenium操作浏览器模拟登陆QQ邮箱

    零基础:Python之Selenium操作浏览器模拟登陆QQ邮箱 一. Selenium简介 二. 环境配置 2.1 Python运行环境搭建 2.2 Selenium相关安装与配置 2.2.1 Se ...

最新文章

  1. Linux常用命令--网终设置
  2. Win7开机密码破解
  3. SharePoint Error - An unrecognized HTTP response was received when attempting to crawl this item
  4. Windows 下面 redis 发布为服务的官方方法
  5. Spark内存管理(1)—— 静态内存管理
  6. 关于pc和移动端相同网站的不同url跳转问题
  7. 3PAR副总裁谈09年存储虚拟化
  8. python实习内容过程_「Python实践」学习之路
  9. .[转] 读十年书,不如读懂这百句话
  10. 100-days: nineteen
  11. 高德地图拾取经纬度 + 搜索 + 标记
  12. 项目管理 : 需求管理的6个流程
  13. ArcGIS介绍 coverage、shapefile 和 geodatabase 这三种矢量数据。
  14. [转载]一位也许是真正的hack说的话
  15. RocketMQ(七) RocketMQ的两种消费模式
  16. Apache官网下载ant软件包及安装详解
  17. Python的namedtuple使用详解
  18. 日语基础复习 Day 13
  19. 专访华为开发者社区唐九洲:与开发者 “在一起,梦飞扬”
  20. 自动化测试和手动化测试的区别到底在哪里呢?

热门文章

  1. github仿android便签,有人在Github上用几行代码就造了个锤子便签
  2. PCA降维+SVR+数据可视化 实战记录
  3. 计算机桌面有什么,电脑桌面是什么
  4. 小程序验证:人的男女偏见对出生性别比例平衡的影响
  5. 专访|十年程序员董一凡:生命不息,学习不止
  6. GIC/ITS代码分析(1)MADT表
  7. php 文章页面阅读全文,纯代码为WordPress文章内容页增加阅读全文展开功能
  8. win10专业版和win10家庭版的区别浅谈
  9. Vuex、axios以及跨域请求处理
  10. 华为防火墙企业双出口专线,配置策略路由实现多个ISP出接口的智能选路和双向NAT