这是一个基于小红书微信小程序,实现小红书关键词搜索记录的爬虫。 这是用python做的爬虫程序。 运行代码, 输入想要搜索的关键词。 可以爬取5页,每页20条,一共100条对应关键词的笔记/视频数据。 ps:这里因为小程序的限制,最多只能获取5页数据。
暂时没有找到更优的办法。 最近研究python爬虫,我本人也在运营小红书,是一个小uper。 在制作自己的图片笔记的时候,思考怎么做,才可以收获更多的”小眼睛“(观看量),和更多的点赞、收藏、评论的数量。 为此我会用小红书的搜索功能,搜索与我同类型的笔记,看看热门的笔记是如何设计笔记标题和封面的。 但是,人工手搜效率太低。 我就想能不能写一个程序来帮助我收集要想的数据。 这就有了做这个程序的想法。 既然是基于小红书关键词搜索,我首先想到的是解决一个问题。 如何可以直接拿到搜索功能的相关接口。 如果找到这个接口就方便批量获取数据了。 找接口经历了许多难题。 我在百度、谷歌一通搜索下来,发现网络上都在强调小红书的数据是最难爬的。 即使在github上搜索,也没有找到傻瓜到可以直接运行的代码。 许多知名站点都有web端,而且没有对搜索功能进行隐藏。所以想要采集数据是比较容易的。 但是小红书是直接找不到web端可以进行搜索的入口,无从下手。 这就让我一开始只能尝试从小红书app寻找突破口。 根据了解,我安装尝试了很多抓包软件。不限于Fiddler、charles等。 最终发现Fiddler更顺手,就一直使用Fiddler。 错误的道路: 1.Fiddler监听小红书app 打开配置好Fiddler,让手机通过Wlan连接到电脑同一个局域网下,并且设置Wlan代理到电脑ip地址的指定端口。端口号是在Fiddler配置好的。 然后通过Fiddler查看监听到的小红书app的数据请求信息。 此间我给手机安装了需要SSL许可的Fiddler的CA证书,让手机能信任Fiddler发起的流量转发。 配置完发现需要将手机root,安装Xposed框架还要安装JustTrustMe插件。 2.尝试绕过系统 首先我的手机肯定不能root,又因为是华为鸿蒙3.0,如果强行root可能会变砖,不敢承担这个风险。 所以没有尝试root。 好巧不巧,我又发现可以选择安装太极,做到无需root即可享有su权限,安装Xposed插件。 天真的我,安装好了太极,和Xposed插件后。 发现Fiddler监听小红书app,app内会直接提示无网络,系统时间错误。 3.安装安卓虚拟机 幸运的我又发现可以安装安卓虚拟机。 我在虚拟机中虚拟化一个已经root了的机器,再安装太极,安装插件,安装小红书。 运行Fiddler监控小红书app。 可是小红书app会闪退。 4.电脑安装手机模拟器 我继续在这条路上走着。得知可以在电脑上安装手机模拟器,再安装上述方案同样的流程。 这个方案我没走,我总觉得是自己选择的方向不对。 我不能在这条路上继续走下去了,太坑了。 赶紧退回来,搜寻其他解决方案。 回过头继续搜索方案,发现很多成功的案例,都需要借助万能的微信小程序。 张小龙你是我的神。 已知小红书的微信小程序拥有简单的关键词搜索功能。 这就足够了。 说干就干。 开始配置Fiddler监听微信小程序数据流。 此间发现可以抓到来自小红书域名的数据,但是能看得懂的都是小红书的图片资源。 而且依然无法抓包https的数据流。 难道又是证书的问题? 按道理电脑安装的证书是值得信任的,是直接被安装到受信任机构的。 那应该就是微信小程序的原因。 搜索了一下,确实是,许多成功的教程都是选用老版本的微信。 那就降版本,下载老版本的PC端微信。 安装好进入小红书小程序,可以拿到https的数据了。不过还是看不到请求关键词内容的接口。 这就很难受了。 找了好久不知道是哪里出了问题。 我在github继续找前人栽的树。找了许多代码,不白嫖,点个star。然后拉取到本地查看。 功夫不负有心人,找到了前辈抓包拿到的接口url。 拿来直接在接口工具中使用,发现请求不成功。 根据代码的完整度看,应该是请求头headers中缺少关键的配置参数。 继续根据headers中不完整的参数进行搜索。 发现是两个关键参数: 最终找到x-sign是对请求的url部分结构进行了几番算法处理后的值。这是一种标识符验证。 运气太好了,寻找到了可以直接拿来用的python加密算法代码,可以直接得到x-sign的值了。 这方便了后面使用python抓取数据。 但是另外一个关键参数 后面在搜寻博客,找到了 再借助Fiddler监听,寻找类似的参数,终于还是被我找到了。 添加到api接口工具,请求成功,完美获取数据。 然后通过request库模拟http请求。 请求成功后拿到返回值,对其进行json处理,随后写入scv文件,保存为csv文件。 整个实践的过程就是下面这样的历程。 关键点 这个实践,让我接触到了许多新领域和知识。
包括不仅限于以下 虽然踩了许多的坑,也走了弯路。
但是走下来,能拿到最终想要的结果,还是很有成就感的。1功能描述
2效果演示记录
3实现思路
做这个事的原因
开始寻找接口
在错误的道路上越走越远
此路不通,宣告失败。此路不通,宣告失败。此路不通,宣告失败。找对方向
在哪跌倒就在哪里躺着吧。功夫不负有心人
x-sign
,Authorization
。Authorization
是什么一直没找到。Authorization
就是在微信小程序接口上请求中的 Authorization
参数。4实现代码
实现代码很简单,就是设置了请求链接url,在headers中加入正确的参数。
5实现原理
headers
中 x-sign
和 Authorization
两个参数如何获取。6总结与拓展