Python爬虫实战(5):模拟登陆淘宝并获取全部订单

通过屡次尝试,模拟登陆淘宝终于成功了,实在是不容易,淘宝的登陆加密和验证太复杂了,煞费苦心,在此写出来和你们一块儿分享,但愿你们支持。css

本篇内容

1. python模拟登陆淘宝网页html

2. 获取登陆用户的全部订单详情python

3. 学会应对出现验证码的状况git

4. 体会一下复杂的模拟登陆机制github

探索部分红果

1. 淘宝的密码用了AES加密算法,最终将密码转化为256位,在POST时,传输的是256位长度的密码。web

2. 淘宝在登陆时必需要输入验证码,在通过几回尝试失败后最终获取了验证码图片让用户手动输入来验证。正则表达式

3. 淘宝另外有复杂且天天在变的 ua 加密算法,在程序中咱们须要提早获取某一 ua 码才可进行模拟登陆。算法

4. 在获取最后的登陆 st 码时,历经了屡次请求和正则表达式提取,且 st 码只可以使用一次。windows

总体思路梳理

1. 手动到浏览器获取 ua 码以及 加密后的密码,只获取一次便可,一劳永逸。浏览器

2. 向登陆界面发送登陆请求,POST 一系列参数,包括 ua 码以及密码等等,得到响应,提取验证码图像。

3. 用户输入手动验证码,从新加入验证码数据再次用 POST 方式发出请求,得到响应,提取 J_Htoken。

4. 利用 J_Htoken 向 alipay 发出请求,得到响应,提取 st 码。

5. 利用 st 码和用户名,从新发出登陆请求,得到响应,提取重定向网址,存储 cookie。

6. 利用 cookie 向其余我的页面如订单页面发出请求,得到响应,提取订单详情。

是否是没看懂?没事,下面我将一点点说明本身模拟登陆的过程,但愿你们能够理解。

前期准备

因为淘宝的 ua 算法和 aes 密码加密算法太复杂了,ua 算法在淘宝天天都是在变化的,不过,这个内容你获取以后一直用便可,通过测试以后没有问题,一劳永逸。

那么 ua 和 aes 密码怎样获取呢?

咱们就从浏览器里面直接获取吧,打开浏览器,找到淘宝的登陆界面,按 F12 或者浏览器右键审查元素。

在这里我用的是火狐浏览器,首先记得在浏览器中设置一下显示持续日志,要否则页面跳转了你就看不到以前抓取的信息了。在这里截图以下:

20150225013600

 

好,那么接下来咱们就从浏览器中获取 ua 和 aes 密码

点击网络选项卡,这时都是空的,什么数据也没有截取。这时你就在网页上登陆一下试试吧,输入用户名啊,密码啊,有必要时须要输入验证码,点击登陆。

QQ截图20150225014124

等跳转成功后,你就能够看到好多日志记录了,点击图中的那一行 login.taobo.com,而后查看参数,你就会发现表单数据了,其中就包括 ua 还有下面的 password2,把这俩复制下来,咱们以后要用到的。这就是咱们须要的 ua 还有 aes 加密后的密码。

QQ截图20150225014019

恩,读到这里,你应该获取到了属于本身的 ua 和 password2 两个内容。

输入验证码并获取J_HToken

通过博主本人亲自验证,有时候,在模拟登陆时你并不须要输入验证码,它直接返回的结果就是前面所说的下一步用到的 J_Token,而有时候你则会须要输入验证码,等你手动输入验证码以后,从新请求登陆一次。

博主是边写程序边更新文章的,如今写完了是否有必要输入验证码的检验以及在浏览器中呈现验证码。

代码以下

恩,请把里面的 ua 和 password2 还有用户名换成本身的进行尝试,用个人可能会产生错误的。

运行结果

QQ截图20150225015508

而后会蹦出浏览器,显示了验证码的内容,这个须要你来手动输入。

在这里有小伙伴向我反映有这么个错误

QQ图片20150227181617

通过查证,居然是版本问题,博主本人用的是 2.7.7,而小伙伴用的是 2.7.9。后来换成 2.7.7 就行了…,我也是醉了,但愿有相同错误的小伙伴,能够尝试换一下版本…

好啦,运行时会弹出浏览器,如图

QQ截图20150225015717

那么,咱们如今须要手动输入验证码,从新向登陆界面发出登陆请求,以前的post数据内容加入验证码这一项,从新请求一次,若是请求成功,则会返回 下一步咱们须要的 J_HToken,若是验证码输入错误,则会返回验证码输入错误的选项。好,下面,我已经写到了获取J_HToken的进度,代码以下,如今运行程序,会 蹦出浏览器,而后提示你输入验证码,用户手动输入以后,则会返回一个页面,咱们提取出 J_Htoken便可。

注意,到如今为止,你尚未登陆成功,只是获取到了J_HToken的值。

目前写到的代码以下

如今的运行结果是这样的,咱们已经能够获得 J_HToken 了,离成功又迈进了一步。

QQ截图20150225200329

好,到如今为止,咱们应该能够获取到J_HToken的值啦。

利用J_HToken获取st

st也是一个经计算获得的code,能够这么理解,st是淘宝后台利用J_HToken以及其余数据通过计算以后获得的,能够利用st和用户名直接 用get方式登陆,因此st能够理解为一个秘钥。这个st值只会使用一次,若是第二次用get方式登陆则会失效。因此它是一次性使用的。

下面J_HToken计算st的方法以下

直接利用st登陆

获得st以后,基本上就大功告成啦,一段辛苦终于没有白费,你能够直接构建get方式请求的URL,直接访问这个URL即可以实现登陆。

好比

直接访问该连接便可实现登陆,不过我这个应该已经失效了吧~

代码在这先不贴了,剩下的一块儿贴了~

获取已买到的宝贝页面

已买到的宝贝的页面地址是

另外还有页码的参数。

从新构建一个带有cookie的opener,将上面的带有st的URL打开,保存它的cookie,而后再利用这个opener打开已买到的宝贝的页面,你就会获得已买到的宝贝页面详情了。

正则表达式提取信息

这是个人已买到的宝贝界面,审查元素能够看到,每个宝贝都是tbody标签包围着。

QQ截图20150225223302咱们如今想获取订单时间,订单号,卖家店铺名称,宝贝名称,原价,购买数量,最后付款多少,交易状态这几个量,具体就再也不分析啦,正则表达式还不熟悉的同窗请参考前面所说的正则表达式的用法,在这里,正则表达式匹配的代码是

最终代码整理

恩,你懂得,最重要的东西来了,通过博主2天多的奋战,代码基本就构建完成。写了两个类,其中提取页面信息的方法我单独放到了一个类中,叫 tool.py,类名为 Tool。

先看一下运行结果吧~

QQ截图20150225234414

最终代码以下

相关文章
相关标签/搜索