php 爬虫抓取网页数据(微信小程序签名参数破解(图))
优采云 发布时间: 2021-12-03 21:24php 爬虫抓取网页数据(微信小程序签名参数破解(图))
最近有朋友想爬取小红书上的图片:
结合以往爬虫经验,抓号难度App>网页版>=微信小程序,所以我们选择小红书的微信小程序进行突破。
使用Charles抓包工具,当你点击小红书小程序中的每个类别时,很容易定位到它的请求和返回结果:
查尔斯抓包:
每个请求返回20条信息流,其中收录我们想要的图片链接;当我们在小程序中继续向下滑动时,会发送新的请求来获取更多的信息流。我们要做的就是提取请求的参数,模拟发送请求,爬取返回结果,提取图片链接就可以了。
由于我在工作中使用NodeJS来爬取爬虫,所以很容易使用JS编写的爬虫代码;大家看文章的可能只是看思路,这里就不放具体代码了。参数里面还有一个比较麻烦的。“签名参数”x-sign,这里是重点:
在网上搜索相关内容的时候,很多大牛确实破解了这个参数:它的格式是字母X加32位十六进制字符,通常32位十六进制字符是MD5加密后得到的结果,所以也比较容易猜测。但是,涉及到解密时,您必须私下联系作者,甚至需要向您收费才能解密。
最近也在研究反编译小程序,成功破解了几个类似小程序的签名参数。抱着试一试的态度,花了一个小时终于搞定了这个参数~
刚才说了,这个参数可能是用MD5算法处理某些值的结果。具体逻辑只有看源码才能知道。文章 一开始就说小程序比较容易破解。原因是微信小程序更容易通过反编译得到源代码(可能不是完整的源代码,但一般的参数逻辑通常可以定位)。
1. 反编译小红书小程序
第一步是反编译小红书小程序,定位到其x-sign参数生成的源代码。这里要反编译小程序,我参考了下面的帖子:
大致流程是登录电脑版微信,打开小红书小程序,找到小程序文件所在目录,解密然后反编译,得到小程序处理的源代码。
2.在源码中搜索目标参数
因为要获取x-sign参数的生成逻辑,我们直接在文件中搜索x-sign:
跟着红框里的相关函数名一路查找,你会逐渐发现就是拼接请求的参数,然后组合一个固定的字符串进行MD5处理,最后在开头加一个大写的X就形成了一个 x 符号。整个过程与最初的猜测一致。
3. 模拟源码重新生成相关参数
过去,我自己用Python来计算爬虫,但在我的工作中,我使用NodeJs爬虫来抓取数字。渐渐地,我发现NodeJS有它的优点:一般的网页前端代码都是用JS写的,小程序中的加密逻辑也是用JS写的。在进行仿真生成相关参数时,可以无缝连接NodeJ。我通常的做法是,无论加密逻辑多么复杂,只要把输入的参数搞清楚,我只要把它的加密代码全部复制下来,设置好需要的参数和变量,直接算出奇迹就可以了。
如图,我在源码中配置了生成x-sign参数的函数和变量后,直接运行,得到某些请求参数所需的x-sign值。
4.配置爬取参数
得到x-sign后,爬虫是一个还算满意的过程,每次请求20个请求,不断翻页获取更多。不过小红书毕竟是大公司出品,还是有防爬措施的。例如,检索到500个条目后,将触发滑块验证:
并且返回1000条信息后,不再返回数据:
所以最终我们的爬虫只能爬取每个目录下1000个帖子和相关图片链接。如果在此期间触发了滑块,则程序在手动拖动滑块验证后仍可继续捕捉。
回到最初的需求,我朋友想在小红书上抓图。既然抓到了图片链接,接下来就可以编写批量下载脚本了——不过已经有大侠在现场了:
回顾整个需求,利用业余时间,用不到一天的时间,效率还是很高的!
反编译破解加密参数的乐趣,尤其是通过自主研究的整个过程,非常有趣。
最后,如果您有爬虫、办公自动化等方面的想法和需求,请联系我。本人能力有限,希望能帮到你~