起因
看到一个网站,可以查到b站用户的历史评论,最早可以造到2015年。 试了几个uid都能查到。 开始好奇,它是如何实现这么大范围的抓取的? 和aicu的大佬聊了一下,得到了一些思路。
目标
输入用户id,展示用户至今为止发出的评论
抓取难点
没有这样的接口
b站是没有这样通过uid跨视频查询所有评论的接口的,至今也没有被人发现存在这样的接口。 我想b站应该也不需要设计出这样的接口给客户端使用。
那么,想要知道这个用户的发言,理论上,就要遍历所有b站的视频,把所有评论都抓取。 假设,我们先不考虑抓取难度,风控、存储等原因,就是笨办法直接抓,现在出现了第二个问题
怎么拿到全站的所有视频?
平常我们使用b站,要么个性化推荐,要么自己搜索,要么排行榜。 用上面这些方式去找,必然有漏网之鱼。不可能覆盖全部。 (以前b站还有分区,也许说可以根据分区接口去遍历所有分区的视频,目前可能已经失效了。)
解决思路
我们不要直接找视频,我们先找人。找到了人,我就可以找到这个人发的视频。就可以找到视频下的评论。 因为b站的所有视频都有一个up主,也就是视频创作者。
找到这个视频主之后,那他的粉丝以及关注者,以及这些视频下的评论的用户。 又得到一批新的用户id。
拿到这些id,重复上述流程。相当于一个图的遍历。 这样就可以最大范围的找到大部分用户,从而拿到大部分视频,从而可以拿到大部分的评论。
起始的用户id
作为遍历的开始,我们直接选择粉丝量大的up主,直接拿百大列表即可。