文章转载自公众号 :裸睡的猪 , 作者 猪哥66

最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章!

看了下网上有很多关于模拟登录淘宝,但是基本都是使用scrapy、pyppeteer、selenium等库来模拟登录,但是目前我们还没有讲到这些库,只讲了requests库,那我们今天就来使用requests库模拟登录淘宝!

讲模拟登录淘宝之前,我们来回顾一下之前用requests库模拟登录豆瓣和新浪微博的过程:这一类模拟登录是比较简单的登录,只需要在请求登录时将用户名和密码上传验证通过就成功了,也就是说一步到位!

而淘宝登录就比较复杂,为什么说复杂呢?因为淘宝登录涉及参数多且请求不止一次!我们就先来讲讲淘宝登录的流程,先把流程原理搞懂,再去敲代码,这样大家就容易理解!

一、淘宝登录流程

为了便于大家理解,猪哥画了一个非标准的淘宝登录请求时序图

淘宝ua参数:ua(User-Agent)故名用户代理,淘宝的ua参数加入了浏览器、ip、电脑、时间等信息,然后加密生成,在很多地方使用,不仅仅是登录!

上图是比较详细的流程图,从代码层面考虑猪哥将模拟登录淘宝分为以下四个步骤:

1. 输入用户名后,浏览器会向淘宝(taobao.com)发起一个post的请求,判断是否出现滑块验证!

2. 用户输入密码后,浏览器向淘宝(taobao.com)又发起一个post请求,验证用户名密码是否正确,如果正确则返回一个token。

3. 浏览器拿着token去阿里巴巴(alibaba.com)交换st码!

4. 浏览器获取st码之后,拿着st码获取cookies,登录成功

这里也许有同学会提出疑问:为什么淘宝(taobao.com)验证通过之后还要拿着 token去阿里巴巴(alibaba.com)交换st码呢? 这个我们放后面讲!

二、模拟登录实现

上面我们只讲了大概的登录流程,这里猪哥会先详细讲解下每一步的操作,然后再贴出实现代码!

1.判断是否需要验证码

目前我们在登录淘宝的时候,大多数情况下是不会出现滑块验证码,猪哥尝试了很多次的登录退出也只是在中间出现过一次,那究竟是什么在控制是否需要滑块验证码的呢?

从上图可以看出,当猪哥输入用户名后,浏览器就会发起一个post请求,来验证是否需要出现滑块验证码,如果返回true,滑块验证码则出现!否则不出现,一般是不会出现!

图中我们可以看到这次post请求上传了两个参数:username、ua!

前面猪哥说过ua为浏览器、ip、设备信息等多信息加密参数,所以猪哥猜想淘宝的验证码是否出现不仅仅从账号角度,还有ip、设备等角度!举个例子:某台设备可能出现登录过大量的账号,这时候淘宝就可以从ua参数中获取设备号,然后对该设备进行限制!

知道了流程和请求链接及参数之后,我们就可以用代码来请求了!

2.验证用户名密码

这里一步也就是上面时序图图中的第5步:请求登录,这里会将用户名、ua参数、加密密码等30十几个参数post到淘宝(taobao.com)去验证。

我们来用代码实现一下,大家别被这么多参数吓到,都是从浏览器复制过来的!

看看请求结果!

可以看到申请st码链接后面带了一个token,具体token是干什么用的后面我们再分析!

3.申请st码

上面我们已经申请到了淘宝(taobao.com)的token,这一步就是用token来换取st码。

到这里很多人可能会有疑问:为什么淘宝登录需要这么麻烦呢?直接在 taobao.com 登录不就可以吗?为什么要先在taobao验证用户名密码,通过之后再去 alibaba.com 换取st码登录呢?

任何公司的框架都是慢慢演变的结果,我猜想最开始的淘宝登录肯定没这么复杂。但是随着阿里巴巴的慢慢壮大,很多事业线都划分开来,但是这些事业线之间又有关联性,比如用户登录了淘宝账号之后天猫就不需要再登录(注意淘宝和天猫的顶级域名不同,所以不能共享cookis)为了实现这个功能,单点登录就出现了。单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 ——百度百科

很多大企业几乎都有做单点登录,那阿里的单点登录系统肯定是由母公司阿里巴巴(alibaba.com)来做啦,所有子公司去调用母公司接口!

我们再回来分析淘宝登录为何要如此复杂就很好理解了:用户数据在淘宝这里,所以需要现在淘宝(taobao.com)验证用户名和密码,验证通过生成一个token,浏览器拿着token去和阿里巴巴(alibaba.com)申请单点登录码(st码),阿里巴巴收到请求验证token通过则返回st码,所以用token换st码的原因就在于单点登录!

理解了设计原理之后,代码实现起来就很清晰了!

4.使用st码登录

成功获取st码之后我们就可以来登录了,这一步是通过st码获取登录的cookies。

到这里我们就已经模拟登录淘宝成功了!

5.获取淘宝昵称

其实上面我们就已经登录淘宝成功并返回用户主页的链接,我们为了进一步验证登录成功,就请求一下淘宝用户主页,顺便把淘宝昵称提取出来吧!

三、总结

整体讲完之后我们来稍微总结一下吧,主要从代码结构和存在的问题两个方面说下:

1.代码结构

来放出一张代码结构图,让大家直观了解

这就是我们前面说过的模拟登录淘宝的四个步骤,不过这里我们是用代码实现了!

2.存在问题

在写这篇教程之前猪哥也是先在网上了解,然后自己用浏览器和抓包工具(Charles)一步一步实践,最重要的是你先要了解淘宝登录的大概流程,不然你实际操作起来会一头雾水,下面就要讲讲目前遇到的问题和存在的问题吧。首先第一个问题便是淘宝的滑块解锁,目前requests还没有很好的破解办法,后面介绍了一些爬虫框架之后我们再来破解吧!

猪哥尝试了很多次(50次以上)登录退出都没出现过滑块验证码。

网上有人使用代理ip,这里猪哥也没用,只要你不是超级超级超级频繁且大量爬取数据,一般大厂都不太会去封ip,因为有误伤率和影响用户面太广,也许一封就是整个小区。

在第二步验证用户名和密码时,上传了近30个参数,如果你把username、ua、加密密码复制进去验证还是不通过可尝试把那30个参数换成你浏览器中的!

在第三步和第四步偶尔会出现一次错误,重试一下就可以!

文章有些关于淘宝登录框架纯属猪哥猜想,如有错误还望指正!

本文涉及源码:https://github.com/pig6/login_taobao

如果你觉得文章还不错,请点赞分享下。你的肯定是我最大的鼓励和支持。

原文标题:Python模拟登录淘宝都实现了,你还怕模拟登录? - Js中文网 · 前端进阶资源教程

python模拟登录网站_Python模拟登录淘宝都实现了,你还怕模拟登录?相关推荐

  1. python手机端秒杀_python实现简单淘宝秒杀功能

    这篇文章主要为大家详细介绍了python实现简单淘宝秒杀功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Python淘宝秒杀的具体代码,供大家参考,具体内容如下 昨天茅台在 ...

  2. python电商数据挖掘_Python 爬取淘宝商品数据挖掘分析实战

    作者 孙方辉 本文为CDA志愿者投稿作品,转载需授权 项目内容 本案例选择>> 商品类目:沙发: 数量:共100页 4400个商品: 筛选条件:天猫.销量从高到低.价格500元以上. 项目 ...

  3. Python模拟登录淘宝都实现了,你还怕模拟登录?

    点击"简说Python",选择"置顶/星标公众号" 福利干货,第一时间送达! 本文授权转载自裸睡的猪,禁二次转载 作者:猪哥66 阅读文本大概需要 8 分钟. ...

  4. python爬虫淘宝评论_Python爬取淘宝店铺和评论

    1 安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动s ...

  5. python+ADB实现手机控制(2021淘宝的喵糖活动自动点击)

    python+ADB实现手机控制(2021淘宝的喵糖活动自动点击) 背景 环境 ADB(Android 调试桥) python环境 手机环境 简单程序 背景 双十一 TaoBao的活动太折磨人了,要一 ...

  6. python控制手机模拟器_Appium+python自动化之连接模拟器并启动淘宝APP(超详解)...

    简介 上一篇讲解完模拟器的安装.配置好以后,就好比我们手机已经买好,并且系统已经做好了,就差我们用数据线和电脑连接开始实战了,这篇宏哥就带着小伙伴们和童鞋们趁热打铁,讲解和分享一下如何连接模拟器(电脑 ...

  7. python爬虫学习 之 定向爬取 淘宝商品价格

    python爬虫学习 之 定向爬取 淘宝商品价格 import requests import redef getHTMLText(url):try:r = requests.get(url, tim ...

  8. HTML5期末大作业:淘宝网站设计——仿2018淘宝首页(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码

    HTML5期末大作业:淘宝网站设计--仿2018淘宝首页(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作 ...

  9. HTML5期末大作业:淘宝网站设计——仿2021淘宝首页(1页) 大学生网页制作教程 表格布局网页模板 学生HTML静态水网页设计作业成品 简单网页制作代码 学生商城网页作品免费设计

    HTML5期末大作业:淘宝网站设计--仿2021淘宝首页(1页) 大学生网页制作教程 表格布局网页模板 学生HTML静态水网页设计作业成品 简单网页制作代码 学生商城网页作品免费设计 常见网页设计作业 ...

最新文章

  1. 使用myeclipse的第一步
  2. ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
  3. js中的null和undefined总结
  4. Maven的简单使用
  5. python和docker交互_jupyter notebook 连接服务器docker中python环境
  6. nodejs项目_多人群聊实现其实很简单:Nodejs+WebSocket+Vue轻松实现Web IM
  7. 年轻人不讲武德有多可怕?
  8. 什么是编译器?(程序是怎么跑起来的)
  9. Confluence 6 用户目录图例 - 使用 LDAP 授权,在用户第一次登陆时拷贝用户
  10. asp.net数据绑定之Eval和Bind 和等区别
  11. 【Computer Organization笔记15】清华计组大作业布置:奋战二十天,做台计算机!
  12. JAVA中Long与Integer
  13. 简单示例用例(Simple Example Use Cases)--hive GettingStarted用例翻译
  14. MyBatis解析<if>动态sql时,Integer类型值为0,返回false
  15. 5G到底有多快?和4G相比的直接数据给你更直观感受
  16. 计算机课程word教学,Word教学方法及使用技巧
  17. NGS测序数据和Microarray芯片数据在基因表达中的应用
  18. spa项目开发之tab页实现
  19. [ARC086]F - Shift and Decrement 位运算+数论+DP
  20. python熊猫图案_熊猫备忘单–适用于数据科学的Python

热门文章

  1. 使用node js 和天猫精灵 开发交互
  2. 安卓手机卡顿怎么解决_手机卡顿怎么办? 用这招“轻松应对”,望周知!
  3. 问题记录远程烧录和看门狗冲突
  4. php 脚本本机ip,一键自动更改本机IP地址的批处理脚本
  5. 震撼发布2017年Android百大框架排行榜
  6. 政策卡、流量卡、手机卡、物联卡等上网卡对比,看看哪种能吸引你
  7. 畅想chatGPT在工业场景中的应用场景
  8. Keil MDK5 STM32全系列 最新PACK包离线包
  9. Mysql运算符记忆打字练习
  10. OpenOCD学习笔记 3-配置基本知识