得物数据抓取+参数加密解析

跟新了内容
新内容:更新的内容
两边来回写太麻烦了,主要是有图片。大家点进去看吧

环境:python 3.6
脚本最后一次修改于 2021-08-27

本次解析的参数为sign,解析的来源为微信小程序源码和H5页面JS文件

咱也不废话,直接上干活
应产品的需求要求需要相关的品类数据(详情数据也验证过,都是相同的方式,没问题的)
需要获取产品列表页的数据,通过两个post接口获取。
接口1【https://app.poizon.com/api/v1/h5/search/fire/commodity/detail_brand"】
参数:{“sign”: 加密参数, “brandId”: 品牌ID,“lastId”: 当前页最后的数(page*pageSize),“sortType”: 2,“sortMode”: 1, “limit”: pageSize,“categoryIds”: [],“debugAgg”: True,“aggregation”: True}

接口2【https://app.dewu.com/api/v1/h5/index/fire/shopping-tab】
参数:{“sign”: 参数, “tabId”: 分类ID, “limit”: pageSize, “lastId”: 当前页最后的数}

这两个只是我用到的,在你实际情况中,可能并没不会使用到这两个,但一通百通,你明白的。

下面讲一下sign这个参数的由来,和注意事项。
你捕获到的接口参数结构顺序是什么样的,就是什么样的,顺序不要变。因为这个顺序和sign的由来有关。
接口访问有IP风控,很严格。如果只是技术研究和学习,低频率的访问即可。如果是其他,请自行开动脑筋。
pageSize也就是参数里limit,固定是20,改成其他的没啥用。

先说下接口1的sign
这个接口是在H5中捕获到的相关接口。通过JS断点的形式跟踪,发现在进入到发送请求前,参数中还是没有sign这个值的,因此断定,sign是在发送请求这个操作力,发送前以固定形式进新的加密。
继续断点,跟踪方法,找到最后的加密结果前的内容
“aggregationtruebrandId{tp}categoryIdsdebugAggtruelastId{lastId}limit{limit}sortMode1sortType2048a9c4943398714b356a696503d2d36”
细心的朋友可以发现这个内容可以分为两个部分
f"aggregationtruebrandId{tp}categoryIdsdebugAggtruelastId{lastId}limit{limit}sortMode1sortType2"
“048a9c4943398714b356a696503d2d36”
对。你没有看错,就是参数字符串化后+固定字符串。然后通过加密生成。
ps:加密我是试出来的。因为很明显是32位小写的,肯定第一想法是md5,试验下,确实是md5.
这也就是为啥每一次访问都是的参数只要变化,sign就无法二次使用的原因。

PostMan测试请求成功。
另外再提一次,网站的频繁访问接入的是极验滑块。

接着是接口2的sign
有了接口1的经验,接口2的思路也很明确了。
获取手机小程序源码。源码通过工具反编译。(百度吧,太多小程序怎么获取和反编译的)
反编译后生成了三个js文件和一个json文件,json文件确认是该小程序。直接打开
因为咱们知道是md5加密,能找到md5关键字的,切格式相同的,就是app-service.js
在这里插入图片描述
因此,我们知道到小程序里的参数组合中的固定字符串是什么了。
19bc545a393a25177083d4a748807cc0
根据接口1反推下接口2的sign组成应该是
f"lastId{lastId}limit{pageSize}tabId{tp}19bc545a393a25177083d4a748807cc0"
PostMan验证下,没有问题。

因为是时隔好几天的文章创作,一些步骤截图我就不在动手了。还是因为内容不是太难,只要细心点,多思考下都能搞定。

加油,打工人,咱们下一次再见。
PS:这里不保证官方会不会进行更新,更新后固定参数会不会改变。也不保证各位看官看到并学习使用的时候,还能否正常使用到。
但只要大的套路不变,其实也就那样。
加油~

你可能感兴趣的:(逆向,python学习,小程序,微信,得物,爬虫,python)