【爬虫】关于淘宝的sign参数生成算法

 关于淘宝的数据抓取,可能涉及到的一个参数就是sign,sign的值是有一个计算公式的,基于已有的经验,知道这种参数一般多是会保存在js文件里的。

(1)在淘宝页面,打开开发者工具(F12),然后搜索sign,一个个查找在哪里出现的sign的赋值

…忽略搜索过程,可以发现在sign的计算关键代码在mtop.js 中,也就是
(https://g.alicdn.com/mtb/lib-mtop/2.3.16/mtop.js)
如图,可以看到sign的具体计算方法,也就是下图的j
【爬虫】关于淘宝的sign参数生成算法_第1张图片

(2)格式化代码,确定具体方法,直接贴出来代码如下:

j = h(d.token + “&” + i + “&” + g + “&” + c.data)

if (d.H5Request === !0) {
var
f = "//" + (d.prefix ? d.prefix + "." : "") + (d.subDomain ? d.subDomain + "." : "") + d.mainDomain + "/h5/" + c.api.toLowerCase() + "/" + c.v.toLowerCase() + "/", g = c.appKey || ("waptest" === d.subDomain ? "4272" : "12574478"), i = (new
    Date).getTime(), j = h(d.token + "&" + i + "&" + g + "&" + c.data), k = { jsv: x, appKey: g, t: i, sign: j }, l = { data: c.data, ua: c.ua }; Object.keys(c).forEach(function (a) {
    "undefined" == typeof
        k[a] && "undefined" == typeof
        l[a] && (k[a] = c[a])
    }), d.getJSONP ? k.type = "jsonp" : d.getOriginalJSONP ? k.type = "originaljsonp" : (d.getJSON || d.postJSON) && (k.type = "originaljson"), d.querystring = k, d.postdata = l, d.path = f
                            }

(3)根据(2)中的函数方法,可以看出来是由一些参数通过&连接起来的。通过上面的代码,可以看出来

 3.1 token是从cookie里面取出来的。
在无cookie状态下去访问该请求:https://acs.m.taobao.com/h5/mtop.taobao.wsearch.h5search/1.0/##,对方会返回关键Cookies信息,_m_h5_tk和_m_h5_tk_enc,接下来会用到。那么token就是_m_h5_tk的值得下划线前面的值
 3.2 i 是时间戳,精确到毫秒
 3.3 data 是传入的参数(通过request传入的参数值,包括搜索的关键词等)

PS:断点调试

建议使用火狐浏览器,毕竟是中文,可以在函数附近添加断点,如下图可以看到,然后右边可以监视每个变量的值,从而可以知道此时的变量值,继而验证我们的是否算的正确
【爬虫】关于淘宝的sign参数生成算法_第2张图片

你可能感兴趣的:(Python爬虫)