淘宝是我迄今为止遇到的反爬虫技术最厉害的一个网站我估计在业界它也是处于顶尖水平的。这里我一共花了整整一天24个小时才有所小得
这篇文章里,我采用手动登陸淘宝的方式获取登陆用的Cookie我会在接下来所有请求里直接使用这个cookie,后面应该会再写文章讲如何抓这个Cookie以及机器识别验证码
言归正传,要完成这个项目先要弄清整个流程。我要抓的是“我的订单”下的商品信息在登陆状态下,访问不同页数的订单页面会发送对应的XHR接着服务器会返回一个包含商品信息的json文件,这个很容易找但是当我用同样的Header和Query String Parameters构建一条请求时,这条请求会被怀疑为爬虫请求淘寶会要求进行验证码认证。个人认为有两种思路解决这个验证码的问题:一个是找到是什么原因导致淘宝认为你是爬虫从而找到绕过验證码的方法;另一个思路就是让爬虫能够通过验证码检测。经过很长时间的分析和尝试绕过验证码的方法我没找到,验证码的流程却分析了出来
首先需要让页面进入验证码流程,这里只需要用一个简陋的爬虫访问一下订单页面就行了接着在浏览器上刷新或者访问下一頁订单,页面会弹出验证码在输入正确的验证码之后,页面会成功跳转到下一页使用浏览器工具将整个过程的报文都抓下来,逐条分析如图,这里我把关键的几条报文按顺序标注了一下:
分析整个流程是最困难的一步如果有人也做这个项目,我个人建议还是先自己汾析为好整个流程大概是这样子的(序号也对应了报文的编号,上图中的数字也对应了各自的编号):
- 这条POST请求就是正常的订单信息请求如果没有进入验证码流程,服务器应该直接返回商品信息json文件如果进入了验证码流程,服务器会返回一个URL你需要访问这个URL获取包含计算所有参数的js文件和验证码图片。 smPolicy, smApp, smReturn, smCharset, smTag, captcha, smSign, ua, code具体哪个是哪个我就不细说了,其实也不重要之后只需要参照报文用起来就行了。这里说两个參数:code这就是正确的验证码;ua,据说是淘宝根据一个很复杂的算法计算出来的其变量还包含鼠标键盘的操作记录。
这里还有个尴尬的哋方我直接抓20个页面的时候一次都没有进入验证码流程,而一页一页访问的时候就很容易进入图片是我好不容易进入了一次验证码流程后抓下来的,可以看到第一张表格上方有输入验证码
因为我这两年在国外,淘宝上买的东西全是dota饰品见笑了。