爬虫实战二:抓取小红书图片

文章正文
发布时间:2024-10-06 21:21

最近有朋友想爬虫抓取小红书上的图片:

结合以往爬虫经验,抓数难度App>网页版>=微信小程序,所以我们选择小红书的微信小程序来突破。

通过charles抓包工具,在小红书小程序内点击各分类时,很容易定位到其请求和返回结果:

charles 抓包:

每次请求返回20条信息流,其中包含了我们想要的图片链接;当我们在小程序里不断往下滑动时,新的请求就会发送获取更多的信息流。我们要做的就是提取请求的参数,模拟发送请求、爬虫抓取返回结果、提取图片链接就ok了。

由于工作中我是使用 NodeJS 来爬虫的,顺手用 JS 写的爬虫代码;看文章的各位可能也只是看个思路,所以这里就不放具体代码了,参数里面有个比较麻烦的"签名参数" x-sign,这里着重说下:

在网上搜相关内容时,确实有不少大牛把这个参数破解掉了:其格式是字母X加32位的16进制字符,通常32位16进制字符是MD5加密之后得到的结果,所以也比较容易猜测。但是吧,涉及到怎么解密,要么要私下联系作者、甚至还要收费给你破解。

最近正好我也在研究反编译小程序,成功破解了几个类似的小程序的签名参数,抱着试一试的态度,最终花了一小时把这参数给搞定了~

刚提到了,这个参数可能是用MD5算法对某些值进行处理后得到的结果,那具体的逻辑只有看源码才能知道。文章开头我又说过小程序是比较容易破解的,原因是微信小程序通过反编译是比较容易拿到源码的(可能不是完全的源码、但大致的参数逻辑通常是可以定位到的)。

1.反编译小红书小程序

第一步是反编译小红书小程序,定位到其x-sign参数生成的源码。这里反编译小程序我是参考如下帖子:

https://juejin.cn/post/7002889906582192158

大致流程是在登录电脑版微信,打开小红书小程序,找到小程序文件的目录,先解密再反编译,获取到小程序处理后的源码。

2.源码中搜索目标参数

因为我们是想获取 x-sign 参数的生成逻辑,所以直接在文件内搜索 x-sign:

顺着红框里相关的函数名一路找下去,会逐渐发现它是把请求的参数进行拼接,再组合某个固定字符串后进行 MD5 处理,最终再开头加个大写的 X 构成 x-sign,整个过程和初始猜测是一致的。

3.模拟源码重新生成相关参数

以往我都是用Python自己琢磨爬虫,但工作中是用 NodeJs 爬虫抓数,渐渐也发现 NodeJS 其优势所在:一般网页前端代码是 JS 写的、像小程序里面这些加密逻辑也是 JS 写的,在进行模拟生成相关参数时,NodeJs 可以无缝衔接。我通常的做法是,无论其加密逻辑多么复杂,只要搞清楚输入的参数,我就直接把它的一堆加密代码全都复制出来,设置好需要的各项参数和变量,直接大力出奇迹得到结果

如图,我将源码中生成 x-sign 参数的函数和变量们配置好之后,直接运行得到了给定某些请求参数时所需要的 x-sign 值。

4.配置参数进行爬虫

拿到 x-sign 之后的爬虫就是中规中矩流程了,每次请求得到20条,不断翻页获取更多。但小红书毕竟是大公司出品,反爬措施还是有的,比如抓取返回500条后会触发滑块验证:

以及返回1000条信息之后就不再返回数据了:

所以最终我们的爬虫只能实现每个目录下抓取1000条帖子内容和相关的图片链接。期间如果触发滑块,手动拖动滑块验证后程序仍可以继续抓取。

回到最初的需求,朋友是想抓取小红书上的图片,我们现在已经抓取到了图片链接,后续再写个批量下载的脚本即可——但已经有英雄登场了:

回顾整个需求,利用工作之余、耗时不到一天,还是蛮高效的!

反编译并破解加密参数的乐趣,尤其是通过独立研究完成了整个流程,都是蛮有意思的。

首页
评论
分享
Top