前一阵有个朋友采集了一堆的淘宝客推广链接,但很多都是加密后的格式http://s.click.taobao.com/t?e=zGU34CA7K%2BPkqB07S4%2FK0CITy7klxxrJ35Nnc0vWaHl37H18cjdMO0RFhunziOFb%2FYR38ThEJAQs2K2vhBq7dgXLmU%2BSx8tU3PLk9d5Pc2Up下文均简称此为淘客链接,朋友希望能转换成正常的淘宝链接,然后他再去自己的微博等地方单独推广这些商品。
他Google了一下,现有的大部分工具都是将普通的淘宝商品链接转换成淘宝客链接,没找到现成的工具可以反向操作的。朋友QQ问我有没办法实现,本来计划用c#写一个gui的工具给他,但他机器上没.net framework加上朋友对这些东西一知半解,还是用Python做了一个简单的实现这里就不放出最终的成品了,只放出操作的过程和核心的函数。
首先拿到一个淘宝客链接:淘客链接
然后在浏览器访问一下,抓一下中间跳转的过程:
挨个分析一下其中的调整以及逻辑就能反向解出正常的淘宝商品链接了。
我来按照上图的调整步骤挨个分析一下:
- 从咱们拿到的淘客链接做了一个302跳转到http://s.click.taobao.com/t_js?tu=http%3A%2F%2Fs.click.taobao.com%2Ft%3Fe%3DzGU34CA7K%252BPkqB07S4%252FK0CITy7klxxrJ35Nnc0vWaHl37H18cjdMO0RFhunziOFb%252FYR38ThEJAQs2K2vhBq7dgXLmU%252BSx8tU3PLk9d5Pc2Up%26ref%3D%26et%3DjFBB23s9VUPVFw%253D%253D这个地址。因为此链接中有一个参数为tu,下文均称此链接为TU
- 跳转到TU后,淘宝返回的页面内容为一堆HTML,HTML内容见这里,然后将TU中tu这个参数的内容做了
unescape
操作后用js做了一个跳转的操作实际上是用js生成了一个超链接简称为ET,然后用js模拟点击了此链接 - 如果仔细观察ET和咱们拿到的淘客链接相比其实只增加了两个参数
ref
和et
,但是实际操作中如果仅仅手动增加这两个参数是不行的……这个链接有一个隐藏的参数即Referer - 从图片中能看到ET这个链接就会跳转到正常的淘宝商品页面,url中仅仅是增加了一个参数
ali_trackid
- 所以实际操作中咱们只要能拿到TU链接,然后
unescape
出tu参数得到ET,然后带上Referer(== TU)然后跳转到ET,再将最终的淘宝商品页面最后一个参数ali_trackid
去掉就是一个完全正常的淘宝商品链接了。
写了这么一堆实际上用Python实现起来只有短短几行就搞定了:
<code class="prettyprint" style="color: inherit; font-family: inherit;font-size:undefined; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;"># -*- coding:utf-8 -*-</span></span></code><p style="text-indent: 2em;"></p><p style="text-indent: 2em;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;">import requests, sys, urllib</span></span></p><p style="text-indent: 2em;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;">reload(sys)</span></span></p><p style="text-indent: 2em;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;">sys.setdefaultencoding('utf-8')</span></span></p><p style="text-indent: 2em;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;">url = 'http://s.click.taobao.com/t?e=zGU34CA7K%2BPkqB07S4%2FK0CITy7klxxrJ35Nnc0vWaHl37H18cjdMO0RFhunziOFb%2FYR38ThEJAQs2K2vhBq7dgXLmU%2BSx8tU3PLk9d5Pc2Up'</span></span></p><p style="text-indent: 2em;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;">def get_real_taobao(url):</span></span></p><p style="text-indent: 2em;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;"> _refer = requests.get(url).url</span></span></p><p style="text-indent: 2em;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;"> headers = {'Referer': _refer}</span></span></p><p style="text-indent: 2em;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;"> return requests.get(urllib.unquote(_refer.split('tu=')[1]), headers=headers).url.split('&ali_trackid=')[0]</span></span></p><p style="text-indent: 2em;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;">rel = get_real_taobao(url)</span></span></p><p style="text-indent: 2em;"><span class="com" style="color: rgb(136, 0, 0);"><span class="com" style="color: gray;">print rel</span></span></p>