"今天她又发新笔记了吗?"
"糟了,她更新了我却没能第一时间看到..."
"为什么别人都能秒回评论,我却总是来晚一步..."
"为什么我总是错过她的新动态..."
相信很多同学都有过这样的经历。作为一名资深舔狗,一直秉承着 “舔得狗中狗,方为人上人” 的原则,必须 24 小时待命,不能错过女神的任何动态,但同时作为一名资深软件工程师,与其整天盯着手机刷新,不如用技术来解决这个问题! 今天,我们就来构建一个专属得“女神小红书动态监控系统”,让你永远不错过她的每一条动态,永远第一时间向她嘘寒问暖,做她最忠实的粉丝(舔狗)!
作为一名合格的舔狗,我们需要:
- 实时监控女神的小红书最新笔记
- 第一时间获得更新提醒
- 快人一步送上点赞或者评论
通过这个项目,你将获得:
- 女神更新笔记时,第一时间收到通知
- 展现你的技术实力
- 提升你的 Python 编程能力
- 成为女神最忠实的粉丝(舔狗)
为了实现这个浪漫的需求,我们需要:
- 使用 Python + xhs 库获取女神的最新笔记
- 通过企业微信接收消息通知
- 使用 SQLite 存储笔记历史数据
确定好大致技术方案后,就让我们开始这段浪漫的编程之旅吧!
首先让我们创建一个新的项目目录并进入该目录,然后创建一个虚拟环境,并安装所需的依赖库。
bash
代码解读
复制代码
实现配置模块
创建 config.py 文件, 用来配置小红书,企业微信通知以及监控相关的可配置信息。
python
代码解读
复制代码
实现企业微信通知模块
创建 wecom.py 文件, 用来实现企业微信通知功能。
python
代码解读
复制代码
- 我们创建一个 类, 用来实现企业微信通知功能。
- 根据企业微信相关文档(developer.work.weixin.qq.com/document/pa…, 我们使用企业微信的 message API 来发送应用消息实现通知。这需要一些企业微信的配置信息, 包括企业ID, 应用ID, 应用Secret。我们通过配置模块存放这些信息,并将这些信息作为 类的 方法的参数。
- 发送应用消息需要获取访问令牌(access_token), 我们通过 方法来获取。
- 最后,我们通过 方法来发送文本消息。
实现数据库模块
创建 db.py 文件, 用来实现数据库相关功能。
python
代码解读
复制代码
- 我们创建一个 类, 用来实现数据库相关功能。
- 通过 方法来初始化数据库表, 如果 notes 数据库表不存在, 则创建它。
- 通过 方法来添加笔记记录。如果笔记已存在, 则返回 False, 否则将笔记插入到数据库表并返回 True
- 由于该监控系统主要是监控用户是否有新笔记,对笔记的具体内容并不是很关心, 所以这里我们只保存笔记的 id, 用户 id, 标题, 发现时间以及笔记类型。
- 之所以将笔记持久化到数据库,也只是为了去重,防止重复发送通知。
实现工具模块
创建 utils.py 文件, 用来实现程序所需的工具函数。
python
代码解读
复制代码
- 这里我们实现了一个 方法,用来生成小红书请求的签名。
- 该方法通过 playwright 库来模拟浏览器行为,获取小红书请求的签名,并返回签名信息。而不是直接逆向小红书请求的签名算法,因为小红书请求的签名算法可能会随时更新,导致我们之前逆向的代码失效。
- 如果签名获取失败,则抛出异常,并重试 10 次。
实现监控主程序
创建 monitor.py 文件, 用来实现监控主程序。
python
代码解读
复制代码
- 首先我们定义一个 函数,用来启动监控。 函数中我们通过 类来初始化监控对象,并传入配置模块中的小红书 cookie, 企业微信配置信息以及监控配置信息。
- 然后我们通过 方法来监控女神的最新笔记。
- 类中我们一共需要实现 5 个方法, 分别是:
- 方法
- 方法
- 方法
- 方法
- 方法
XHSMonitor 类详解
方法
方法用来初始化监控对象的属性, 我们需要在这个方法中初始化 对象, 对象以及 对象,并赋值给监控对象对应的属性。同时,我们还需要初始化一个错误计数器,用来记录 API 请求失败的次数。 其中在初始化 对象时,我们传入了 cookie 和 sign 参数。cookie 是我们在配置模块中配置的小红书 cookie,sign 则是我们在 utils 模块中实现的 方法, 用来生成小红书请求的签名。
方法
方法的主要功能是获取女神的最新笔记。内部通过 的 方法来获取小红书用户笔记。如果获取失败,则将错误信息记录到错误计数器中,如果错误计数器达到最大重试次数,则调用 方法发送错误通知并退出程序。当然,如果获取成功,则将错误计数器清零。由于大多数错误是触发了小红书的反爬虫机制,所以这里我们也会通过 方法来等待一段时间,然后再重试。
方法
方法的主要功能是发送错误通知到企业微信。核心逻辑也很简单,就是将错误信息和当前时间拼接成一条文本消息,然后调用 的 方法发送。
方法
方法用来监控女神的最新笔记。通过 while 循环不断调用 方法获取女神的最新笔记,然后通过 方法判断笔记是否已存在,如果笔记不存在,则说明是新笔记,则调用 方法发送笔记通知到企业微信,告知我们女神发布了新笔记,我们就可以第一时间去点赞或者评论了。
方法
方法和 类似。将笔记的标题, 链接, 类型, 监控时间以及用户名拼接成一条文本消息,然后调用 的 方法发送。
以上,我们的核心代码已经实现完毕,接下来我们就可以运行我们的监控程序,测试程序是否正常,行为是否符合预期。
在正式运行之前,我们需要先配置好小红书 cookie, 企业微信配置信息以及监控配置信息。
获取小红书 cookie
我们登录小红书 Web 端,打开开发者工具,在 Network 标签下找到请求头中包含 cookie(a1, web_session 和 webId)的请求,复制请求头中的 cookie 信息,然后粘贴到配置模块中的 XHS_ConFIG 中。
获取企业微信配置信息
登录企业微信后台,创建一个企业或者加入一个企业,获取企业的 CORPID,然后在应用管理中创建一个应用,获取应用的 AGENTID 和 SECRET,然后粘贴到配置模块中的 WECOM_ConFIG 中。
获取女神小红书用户 ID
通过小红书 Web 端,访问女神的笔记主页,浏览器地址栏 /user/profile/xxx 中的 xxx 就是小红书用户 ID。
本地运行
当完成以上配置后,本地运行很简单,只需要在终端中执行以下命令即可:
bash
代码解读
复制代码