Python爬取360指数
好吧,其实由于能力有限,未能爬取到指数。下面把我的思路记录下来,也期待大神多多指教。

可以看到指数已经加密了的,于是就找js加密函数。

经过好几天的奋战,终于在zhishu.js找到了加密函数
function decode(str, map) { var result = []; var resultCur = ''; for (var i = 0, l = str.length; i < l; i++) { if (map.includes(str[i])) { resultCur += str[i]; } else if (resultCur) { result.push(resultCur); resultCur = ''; } } if (resultCur) { result.push(resultCur); } return result; } function decodeMap(str) { var result = []; for (var i = 0, l = str.length; i < l; i++) { if (result.indexOf(str[i]) === -1) { result.push(str[i]); } } return result; } function transfer(arr, map) { var result = []; var len = map.length; for (var i = 0, l = arr.length; i < l; i++) { var num = 0; var bit = 0; for (var j = arr[i].length; j--;) { // console.log(Math.pow(len, bit++)) // console.log('len: ' + len) //41 console.log('arr: ' + arr[i][j]) console.log('map:' + map.indexOf(arr[i][j])) console.log('bit:' + bit) console.log('pow:' + Math.pow(len, bit)) num += map.indexOf(arr[i][j]) * Math.pow(len, bit++); console.log(num) } result.push(num); } return result; } function unzip(arr, len) { var result = []; if (parseInt(len, 10)) { result.length = parseInt(len, 10); } for (var i = 0, l = arr.length; i < l; i += 2) { result[arr[i]] = arr[i + 1]; } result = result.join('|').split('|').map(function (n) { return parseInt(n, 10) || 0; }); return result; }
_bn = 'OBSO{xSnBwO$/VKwQBFK<>Kt$R3{qLx,+{UpF.Rd.(woqXS)4/T1DRztg,}nYG$@JB?dMf{^0V|0slte#<Ax8nZ<W2Es9us%Hrsk8_XcQyG'
avg = 'OanT@a'
index = 'OmwmB!3!S&q&{mQmxPFPn!{!whxh$6x6/h>hVb<bK*<*QaqaFPQP<bxb>b/btPtPRhFh3m$mq5Q5LaQa,P{P+b{bUm<mp&Q&.hKhd!V!(6V6omxmX6{6)jFj'
map = (0, decodeMap)(_bn)
console.log(map)
average = (0, transfer)((0, decode)(avg, map), map);
index = (0, transfer)((0, decode)(index, map), map);
u = unzip(average, 0)
i = unzip(index, 0)
console.log(u)
console.log(i)
[23865]
[6, 17, 18, 11, 12, 3, 4, 4, 14, 13, 13, 18, 11, 4, 8, 15, 12, 7, 11, 11, 3, 3, 13, 11, 10, 9, 9, 4, 3, 12]
返回的结果可以看出,指数平均值是对的,但是指数的值是错误的。
但是以为指数又加密了,继续查看zhishu.js后才发现,这组数据是和渲染图形的y坐标有关。

后来发现指数是由好几张图片拼接而成的,而图片又是加密的字符串

至此,再也没思路了。爬取360指数宣告失败!
十年开发经验,承接小程序,企业官网开发。欢迎骚扰。QQ:958759420
浙公网安备 33010602011771号