首页 » 技术分享 » 百度指数-返回结果解密

百度指数-返回结果解密

 

一、背景

目标链接:http://index.baidu.com/v2/index.html#/ ,百度指数,搜索关键字的搜索指数,可以指定时间区间和地域

二、过程

1、确定加密参数

搜索关键字,需要进行登录才可以进行搜索,先进行登录,然后搜索抓包,接口:http://index.baidu.com/api/SearchApi/index?area=0&word=爱奇艺奔跑吧&startDate=2019-04-26&endDate=2019-05-25 ,url中没有加密参数,复制url和请求头,可以正常返回数据,但是返回的数据,有部分数据,进行了加密
在这里插入图片描述
同时,因为必须登录才可以抓取数据,经测试,cookie中的“BDUSS”字段,对应着登录状态,请求时需要携带该参数

2、确定加密函数

一开始先在页面上搜索关键字,找了好几个js文件,但是没有发现对应的加密函数,这时我想着可以看看手机端web页面的,然后发现结果也是加密的
在这里插入图片描述
虽然加密,但是有对应关键字,就进行全局搜索,终于发现了一个函数
在这里插入图片描述
三个加密的数据都在这个函数中,可以确定该函数就是加密函数

3、处理js函数

  • 确定参数b: 通过chrome的断点调试,发现有个参数b,该参数每次的值都是不一样的,并且全局搜索并没有发现该值,一开始以为是js加密生成的,但是找了好几个js文件依旧没有找到,然后想着会不会请求生成的,就查了下动态请求,在数据接口的下面发现了一个接口:https://index.baidu.com/Interface/api/ptbk?uniqid=5cea79ab25c3b7.89038226 , 请求该接口返回了个数据,和参数b的值比对了下,发现是一样的
  • 实现加密过程
def decrypt_baidu_index_response(keys, encrypt_data):
    """百度指数返回结果解密"""
    w_data = {}
    for index in range(len(keys)//2):
        w_data[keys[index]] = keys[len(keys)//2 + index]

    decrypt_data = ''
    for i in range(len(encrypt_data)):
        decrypt_data += w_data[encrypt_data[i]]
    return decrypt_data

重新请求电脑端web页面,同样可以解密返回结果

三、总结

转载自原文链接, 如需删除请联系管理员。

原文链接:百度指数-返回结果解密,转载请注明来源!

1