网站制作公司兴田德润i在哪里,常德百姓网,鲜花网站建设的目标,网站设计论文经济可行性分析目录 正常写
反爬
逆向分析
关键字搜索
打断点分析代码
得出 sign 的由来
确定加密方式
写加密函数了
补全代码 免责声明:本文仅供技术交流学习,请勿用于其它违法行为. 正常写
还是老规矩,正常写代码,该带的都带上,我这种方法发现数据格式不完整.
应该后面也是大…目录 正常写
反爬
逆向分析
关键字搜索
打断点分析代码
得出 sign 的由来
确定加密方式
写加密函数了
补全代码 免责声明:本文仅供技术交流学习,请勿用于其它违法行为. 正常写
还是老规矩,正常写代码,该带的都带上,我这种方法发现数据格式不完整.
应该后面也是大括号的. --因为是get请求,所以我们看一下请求时的参数. 发现回调和一些类型. 那我们把那三个参数删了就行了.
然后直接 print(res.text) 拿到数据.(字符串)
转字典.
数据解析就OK啦... 那么,如何拿取多页数据呢???
通过分析,这是get请求,我们可以通过修改页数的参数获取数据.
反爬
但是... --这里我们修改参数,发现竟然找不到此data键了,那是什么原因呢??!
逆向分析
那就分析数据包吧... 这里我们抓取三页的get请求载荷分析, 发现参数 t 和 sign 在变. t 171开头,那就是时间戳了,肯定不同. 所以,我们就看看这个 sign 在搞什么鬼. 关键字搜索 所以,我们就要找 sign 关键字了. 打断点分析代码
--继续,搜索,打断点,找小偷.
这里一个sign哎,好有问题,
一个断点,果然,停住了,说明调用了. 接着分析. 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: w,appKey: g,t: i,sign: j}#sign等于一个j值.#j值由h函数生成. 这里我们进入断点的时候,c.data断点不一样,需要我们进入.(别找错了值) 得出 sign 的由来
j h(d.token i g c.data)
d.token-----144f4ba1ed9c3944eb03e90991372484
i---------1711435532424
g----------12574478
c.data---data的载荷
144f4ba1ed9c3944eb03e90991372484171143553242412574478data的载荷
#h()生成字符串,就是上面这一大坨. 选中h函数,有一个超链接,点进去. 确定加密方式 兄弟,我说这个怎么这么眼熟,js逆向入门那节我还特意截了图...
...怎么又是MD5加密.
怎么???不确定?? O.0 就是你!!! MD5
写加密函数了
j h(d.token i g c.data)
token:144f4ba1ed9c3944eb03e90991372484
此token在cookie里啊--
_m_h5_tk144f4ba1ed9c3944eb03e90991372484_1711444131624;
#因为cookie有时效性,所以过一段时间我们就要修改一下此参数值.(在cookie里面的_m_h5_tk)
------------------------------------------------------------------------------------------------------
i---------1711435532424
import time
a time.time()
#i---------1711435532424
# 1711437621
# 1711437658229
print(int(a*1000))
#这个时间戳,我们保证位数相同就OK了.
------------------------------------------------------------------------------------------------------
g----------12574478
#这个g是固定的,不信就多发几次请求.
--------------------------------------------------------------------------------------------
c.data---#这个就是我们上面的载荷,太长了,不复制了.
def jiami(i):token 4b075d78ac2dcffff8b11d4698b6188c#24046e79bde126ac3fee2e8508fd0da6t str(int(time.time()*1000))g 12574478
c_data {biz:sem_single_pc,query:{\\keyword\\:\\女装\\,\\pid\\:\\430673_1006\\,\\sbid\\:\\pcrm\\,\\refpid\\:\\mm_26632258_3504122_32538762\\,\\clk1\\:\\front_lu8bx4ug1n50nuva1ljh\\,\\page\\: str(i) ,\\count\\:60,\\offset\\:0},feature:predict_desc,promotion_price,spm:a2e0b.20350158.31919782,app_pvid:201_33.51.94.81_26284301_1711454667348,ctm:spm-url:;page_url:https%3A%2F%2Fuland.taobao.com%2Fsem%2Ftbsearch%3Frefpid%3Dmm_26632258_3504122_32538762%26keyword%3D%25e5%25a5%25b3%25e8%25a3%2585%26clk1%3Da8eba43425e1e5ec18b3b33d575a5619%26upsId%3Da8eba43425e1e5ec18b3b33d575a5619}
code token t g c_data# print(这是第%s页数据%i)return hashlib.md5(code.encode()).hexdigest(),t,c_data# .hexdigest() 拿到密文值.
--这里我们写出加密函数.
sign的参数有了.
时间戳有了.
请求数据有了.
--最后补全代码就行了.
补全代码 --这里循环拿数据有点问题,希望有懂的佬指点一下,谢谢~~