本文代码已上传github,自取链接:https://github.com/Bla1n/WBDXmonitor
简而言之
好久没关注这个监控脚本了,因为wb接口一直可以用,所以以为一切正常。前几天发现bz和dy的接口都无法达到实时监控的目的了,就想办法解决一下。
问题
1.bz接口直接访问结果如下
2.dy接口虽然还能访问,但是显示的视频数量与实际并不相符(挺奇怪的,不知道现在这个接口的具体用途是什么),无法达到实时监控的目的。
研究一下
dy怎么了?
首先是dy,先是在网上搜集了一下现成的监控工具及脚本。大多数工具都是基于登录后的凭证来实现监控的,但是dy在陌生设备上登录认证流程又很繁琐(比如网页版,我选择密码登录要求使用常用设备进行扫码认证,那我为啥不直接扫码登录呢?😅),反爬机制也针对脚本做了很多阻碍,现有的脚本也多是采取Selenium来模拟浏览器达到绕过前端混淆的。
就首次登录返回的__ac_nonce
,进而前端混淆加密生成的__ac_signature
,我就研究了一天。但由于两点原因我选择放弃去主动请求生成\__ac_signature
。(关于逆象混淆函数的同学可以自行搜索“__ac_signature
”关键字进行学习)
第一,可能是因为脚本原因,不带任何cookie去访问dy主页,响应包的返回会非常慢,经常超时。
第二,__ac_nonce
与__ac_signature
存活时间非常久,至少有一年存活期(我去随意搜了一个半年前的依然能通过验证)。
所以我选择手动添加一个现成的凭证。
如果仔细研究的同学可能会发现,dy实际使用的身份认证凭证并不是__ac_nonce
与__ac_signature
,而是后面生成的ttwid
。但为什么我还是选择使用他俩呢?咱们往下看。
比如我想关注”犬来八荒w“的更新动态个人空间的URL为:https://www.douyin.com/user/MS4wLjABAAAAnCz_s5xyosgWTo5lTxKCmoYX1-uiytDsAKBye1LbfDE
可以发现在不登录状态下,网页是返回了当前作者的作品数量的。虽然有验证码,不输入直接关掉会网页跳转,禁止访问。但是到这里其实就足够了。
只要实时监控这个作品数量,就可以知道作者是否更新(前提是作者不删掉以往的视频造成数量的变化,但其实这种情况比较少见)。
思路有了就直接进行一个get请求,然后通过re正则匹配就能获取到作品数量了,这里不过多解释了,可以自行看代码。
num = re.findall('data-e2e="user-tab-count">(\d*)</span>', res.text)[0]
bz怎么了?
以前的bz可以直接访问api接口获取视频数量的,如下图所示
但现在不行了,直接访问会被风控拦掉。并且我第一反应也是延续dy的思路进行爬取,但是bz现在引入了csp内容安全策略,如下。
你会发现哪怕未登录状态下直接访问作者的用户空间也会经过一系列的复杂前端混淆才能获取到数据
鉴于最近比较忙,原本打算暂时放弃研究,日后再慢慢分析里面的参数。随后我又随便点点点,发现bz的搜索界面返回结果并没有做csp之类的策略。这不又有了嘛😁。(反正我要的只是一个提醒的目的,这对我来说已经足够了)
正则匹配也很简单(脚本返回的数据包内容就是“稿件”而不是“视频”,我也挺奇怪)
num = re.findall('稿件:(\d*)</span><a target="_blank"', res.text)[0]
xhs顺手也研究一下
xhs相对来说比较简单了,未登录状态访问只返回最新的32条笔记,那我只需要把这32条笔记的特有标记记录下来(看了一下js代码,还是题目最好记),如果有新笔记加入就会改变返回的32条记录,这就是判断更新的依据了。
脚本如何使用
start.py
里面自行修改一下WxPusher微信消息推送服务
的私人用户凭证
同级目录下有4个monitor结尾的py文件,分别把其中的uid或者url修改成自己想要关注的人对应的就好(自行去找,相信看到这的同学没有不会定位的)
一切修改完毕后,在自己的服务器上部署个定时任务,每分钟提醒一次即可
脚本的其他内容也进行了细枝末节的”优化“,并不是标准化编程,其他部分(微信提示内容等)自行修改,我这人主打一个能用就行。
写到这里就结束啦,我们下次再见👋