关于淘宝的数据抓取,可能涉及到的一个参数就是sign,sign的值是有一个计算公式的,基于已有的经验,知道这种参数一般多是会保存在js文件里的。
(1)在淘宝页面,打开开发者工具(F12),然后搜索sign,一个个查找在哪里出现的sign的赋值
…忽略搜索过程,可以发现在sign的计算关键代码在mtop.js 中,也就是
(https://g.alicdn.com/mtb/lib-mtop/2.3.16/mtop.js)
如图,可以看到sign的具体计算方法,也就是下图的j
(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:断点调试
建议使用火狐浏览器,毕竟是中文,可以在函数附近添加断点,如下图可以看到,然后右边可以监视每个变量的值,从而可以知道此时的变量值,继而验证我们的是否算的正确