百度指数-返回结果解密

    xiaoxiao2025-05-27  90

    一、背景

    目标链接: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页面,同样可以解密返回结果

    三、总结

    破解加密问题时,PC端web页面的加密难以处理时,可以尝试从手机端的web页面进行突破完整代码见:https://github.com/HLFYY/spiders/blob/master/spiders/baidu_index.py
    最新回复(0)