侧边栏壁纸
博主头像
why

一个主要敲代码,经常怼文章,偶尔拍视频的成都人。

  • 累计撰写 197 篇文章
  • 累计创建 11 个标签
  • 累计收到 98 条评论

我宣布,这是我2022年吃的最有意思的瓜!

why
why
2022-05-30 / 0 评论 / 0 点赞 / 29 阅读 / 4,737 字
温馨提示:
关注公众号why技术,第一时间接收最新文章。

你好呀,我是歪歪。

周末的时候吃了一个瓜,真的是太好吃了。

虽然 2022 年都还没过半,但是我个人已经把这个瓜评选为年度前三了。很久没有吃过这么有质量,又让我酣畅淋漓的瓜了。

事情这样的,我在知乎上刷到了这样的问题:

按理来说,我是一个数学渣的,这种关于数学的问题我一般都不是很感兴趣。我甚至都不记得我高考的时候数学考了多少分了。

但是,我还是鬼使神差的点了进去。

没想到,这一点进去,我就陷进去了。

题目大概是说 B 站上有个 up 主说自己高考数学的时候差不多 35 分钟就把题做完了,最后考了 149 分。

这个 up 主其实挺好的,我还专门去看了一下他之前的视频,他今年一月份发的视频里面说自己是在美国攻读博士学位,学的是纯数学专业。

然后他的高考数学分数没有问题,因为他后面晒了自己的成绩单,但是由于没有可以佐证的证据, 35 分钟这个时间特别有争议了。

大家围绕着这个时间就开始吵起来了。

一拨人说应该问题不大,一拨人说绝无可能。

于是就出现了下面这样的一个回答,我先给你全文截个图:

https://www.zhihu.com/question/522084520/answer/2394053852

总体意思就是有个不愿意透露姓名的、参加过数学奥林匹克大赛的数学大佬,他说他觉得没有人可以在 35 分钟之内高考数学拿到 149 分。

他还立下了奖金 100w 的战书:

在 2022 年 6 月 7 日中午 12 点集合,等当天试卷出来之后全网直播,40 分钟之内 145 分以上即可,参赛费 1 万,挑战成功奖金 100 万。

他也知道知乎上能人辈出,所以特别欢迎大家来打他的脸。希望大家帮他扩散这个消息,让更多的人看到,如果能凑够十个人就开搞。

此消息一处,各路吃瓜豪杰闻风赶到。我给你看看这个回答的数据:

3.3w 人点赞,6805 条评论,5736 人追更,1.7w 人收藏,很恐怖的数据了。

因为答主最后一次更新在 3 月 20 号。至今已经过去了 2 个多月了,我当然第一时间是想知道截止现在有多少人报名了。

所以我想在评论区里面找到答主关于这方面问题的回复。

但是 6800 多条评论,这么多评论直接影响到我吃瓜的速度了。知乎网页版上分页就分了 121 页,而且里面还夹杂着特别多的“查看回复”:

“查看回复”,就是下面这种楼中楼的情况:

我翻了几页,我就发现事情不对,这瓜虽然好吃,但是一页页的翻的话,吃起来也太费劲了。

你知道,我是程序员嘛。

所以…

扒评论

知乎的评论我看了一下,特别的好扒,结构也不算复杂。

从开发者工具中看到的接口和响应是这样的:

你看它的这个接口,里面有个 limit=20&offset=0,猜也能猜出来,limit=20 的意思是一页显示 20 条,然后 offset=0 说明它是基于偏移量来做的分页。

然后返回的数据中有一个 paging 的属性。

很重要,所以我把这个属性单独拿出来说:

前两个属性不多说了,分别用来标识当前是否第一页和最后一页。

接着有个 next 和 previous,表示上一页和下一页。你注意看这两个属性唯一的差别就在 offset 上,一个是 0,一个是 20,也就是说一页显示 20 个。

totals 代表有 2417 条数据。一页 20 个,所以一共 121 页。

那么问题就来了,明明前面说了 6805 条评论,这里怎么只有 2417 条呢?

这个差距也太大了吧?

是的,我开始也有这个疑问,于是我随便找了一个"查看回复"点了一下:

在开发者工具里面看到了这样的请求和响应:

看到接口名称的时候,我一瞬间都懂了。

前面的 2417 条,是 root_comments。每个 root_comments 下面会挂很多 child_comments。

拿个实际的数据来说,就是这个意思:

所以我的策略是先把 root_comments 都拿下来。

我想要拿到的数据应该是谁评论了什么内容,这个内容有多少人点赞,对应的数据是这样的:

所以这个程序写起来很简单,就这么几行代码:

从输出的结果来看,是没有毛病的:

但是我发现一个神奇的事情是这样的:


当我获取到 offset=420 的时候,只给我返回了两条数据再然后就全是空了:

一直到 offset=2420 ,也就是最后一页,都是空的:

我不理解,但是我也找不到为什么,猜测应该是触发到了他们的某个限制策略了吧。

我前面不是说了知乎是根据偏移量分页的嘛,很有可能的一个逻辑就是当 offset 大于某个值的时候,系统认为这个值不合理,觉得你有可能是在刷数据,那么我就不给你数据了。

我想找找其他的帖子来论证我的观点,但是一时间竟然没有找到一个回答下面有超过 5000 个评论的帖子,所以这条路没有走通。但是也侧面证明了,这确实是一个神贴,在整个知乎都属于少部分的情况,出点奇奇怪怪的异常也是很正常的嘛。

但是我发现了另外一个问题,其他评论不多的帖子,比如我之前写的一篇关于成都的,只有 722 个评论。

当我点击评论的时候是这样的:

弹窗加上下拉瀑布流的形式进行的展示,和手机上的展示类似。根本就看不到什么分页信息,这才是偏移量分页的正确打开方式。

因为可以带着上一次返回的数据的最大 id 去做 limit 查询,这也是大数据量的情况下,一个非常好的分页手段。

具体好处就不展开了,老八股文了,说多了没意思。这是只是一个应用场景而已。

回到我们的神贴中,前面我说了它下面是有分页的,但是通过接口访问到 offset=440 的时候,只展示了两条数据之后,就没有数据了。

也就是说接口最多只返回 442 条 root_comments 类型的数据。442,一页 20 条,一共 23 页。

所以我只需要在评论页上点击到 23 页,就能证明我的观点。

首先我直接点击最后一页的时候,是一片空白,和我们程序表现一致:

然后,我就从第一页开始,一页页的点,点到 23 页的时候,果然是符合我的猜测的:

虽然后面还有接近 100 页,但是全是空白页,这应该是知乎的一个 BUG 吧?

算了,不深究。

先能拿多少数据就拿多少数据,牢记使命,吃瓜的时候要跟着主线走,先把主线剧情打通关。

千万不要因为走的太远,而忘记自己吃瓜的初衷。

现在的主线就是 root_comments。

而我已经把 root_comments 的数据拿到了,还要获取对应的 child_comments 怎么搞呢?

还是得找到对应的接口才行。

当点击评论下面的“查看回复”时,接口是这样的:

其中有一串神秘的数字,10093095452,这是什么玩意?

我也不知道,但是我知道这是一种 restful 风格的请求,所以这个数字,是一个入参。

既然是获取 root_comments 下的 child_comments,这个入参一定和 root_comments 有关。

于是我拿着这串数字直接去搜索了获取 root_comments 时的第一页返回数据:

你看我标注了五角星的地方,原来这串神秘数字,就是每个 root_comments 的 id 呀。

而且还有一个意外收获,我发现返回的数据结构里面有个 child_comment_count 属性,这个数据就是代表这个 root_comments 下面有多少个评论。

所以,我在解析 root_comments 的时候,只需要判断一下对应的 child_comment_count 属性是否为 0。不为 0,则说明是有回复的,按照前面说的 restful 的方式获取数据即可。

也就是在程序中加入这样的逻辑:

而 handleChildComment 的关键其实就是拿到这个 url,后面的代码就和解析 root_comments 基本一致:

把代码跑起来,控制台日志打印的哗哗的:

检查了一下,看起来没有毛病。

接下来就更简单了,把数据搞到数据库里面去就完事了。

最后一共拉取到了 4267 条数据:

距离 6800 条评论还差一点,原因前面说了,当 offset 大于某个值的时候,接口就没有返回数据了。

这不重要,反正大部分数据都拿到了。

接下来就是安心吃瓜了。

开始吃瓜

因为我最关心的是答主说了些什么事情。

所以我首先过滤了一下 cna777 这个答主的所有回复:

这个吃瓜的姿势就很舒服了。

从答主的回答来看,好像截至 5 月 26 号,只有三个人报名,如果到 6.1 还没有 10 个人的话,可能今年就不会组织了。

果然是吃瓜的人很多,但是都真的只是吃瓜而已。

其中我还看到答主有这样的一个评论,有点意思,我当然要看看上下文是什么了。

前面扒评论的时候我说了,我把 root_comments 的 id 存下来了,所有只需要过滤指定的 id,就能找到上下文:

原来是有人质疑答主是否有这么多钱。这个没啥意思,但是我惊讶的发现这个 root_comments 的 id 下面居然有 197 条评论。

是一个非常有争议性的评论,所以我看了一下评论的内容:

然后找到了对应的页面上的评论,把这 197 条评论全部看完了:

总结起来就是说这个叫做 kiki 的同学,说他是高中数学老师,他觉得这个挑战可以完成,但是不知道为什么,即使非常多的吃瓜群众叫他展现一波实力,他也一直顾左右而言它,并不正面应战。

主要是质疑答主是否能拿出这 100w,这个质疑也在其他的评论中出现过。

但是我就奇怪了,要是真的有实力就直接去报名啊。主要是现在报名的人都没有 10 个,大家就开始怀疑答主能否拿出 100w。然后借题发挥,输出自已的各种观点。

这个逻辑的先后顺序也不对的嘛,答主不是多次说了嘛,等报名人够 10 人了,他会去公证处进行公正的嘛。

接着我想看看哪个评论的话题性是最大的,也就是 root_comments 的 child_comment_count 数是最大的。

我截取了排名前十的数据:

第一位是一名叫做“无亡”的用户,他说:

我要挑战 天津考生 天津卷常年 40 分钟以内写完 很多次 150

然后下面有 610 个回复:

从评论上看这个哥们好像确实报名了,也是第二个报名的。

瞬间觉得这真的是个人才啊,于是想去他的主页看看这是何方神圣。

结果…

这是牛逼吹的太大,兜不住了,自己就销号了?

这里答主说的“退乎”的人,应该就是这个“无亡”同学吧:

所以,这个故事告诉我们什么?

口嗨一时爽,装逼要谨慎。

回复第二多的是这个:

很多吃瓜群众都愿意对这个比赛进行众筹,我粗略的算了一下,好像大家的钱加起来,距离 100w 也不算特别远了。

说真的,要是这个活动办起来,我也愿意花钱买个门票,看看应战的人到底是何方神圣。

翻了很多评论,反正就是有几个人装逼说问题不大,但是一叫报名就各种各样的借口。

然后我换了一个视角,按照评论点赞数最高进行排序:

前 10 前面,我最喜欢的是这个评论:

真的是这样的,只要在任何的社交平台里面讨论到跑步相关的话题,总是有人冒出几个特别的离谱的成绩,吹的是有板有眼的。

但是真的要说在线下来对线,真刀真枪的干一场,马上各种各样的理由就来了,反正就是不承认自己在吹牛逼。

包括这个评论下面也是,大家又开始关于跑步成绩吵起来了。

用我们程序员的话说就是:no bb,show me code.

还在评论里面发现了一个角度刁钻的哥们:

他居然想组局对赌,真的是处处是人才啊。

我还发现了特别多的评论是"cy",我也不懂是啥意思。就搜了一下,原来是“插眼”的意思。

要说插眼,我就懂了。我盲僧插眼贼溜。

有 10 分之一的评论都是 cy:

评论区还有特别多的瓜可以吃,但是我就不一一列举了。

我接着就去了 B 站,我看到了两个相关的视频。

第一个是这个:

https://www.bilibili.com/video/BV1Va411t7CV/?spm_id_from=333.788.recommend_more_video.2

这个 up 主的自我介绍是这样的:

我高考数学 148 分,考入清华基课班竞赛业余选手,教了 12 年数学。但是做题巅峰事情的我应该也做不到,但是我联系报名了大众组,重在参与。

这哥们,一看就是实在人,实力在线,但是不轻易装逼,报个大众组,赚个噱头,稳得一笔。

这个视频下面有个评论是把我看笑了:

我也来装一个,本人高考728分,现在在麻省理工数学系读博,本科期间总共发表了接近500篇sci,研一的时候读到过哥德巴赫猜想,花了我两天才解决掉,也因此获得过菲尔兹奖,我想说,高考我50分钟做完数学满分,但这也算我的极限了,因为我是看到题目就想到答案,再加上写的时间,如果写的再快点最少也要40几分钟吧,40分钟以内根本不可能。装完了,爽!

很好的讽刺了这个话题下面的一些“装逼犯”。

而我想说的是:兄弟,别光喝酒,吃几颗花生米啊,边吃边说。

第二个视频是这个:

https://www.bilibili.com/video/BV1sP4y1M7K4/?spm_id_from=333.788.recommend_more_video.-1

这个大佬给出的结论是有可能。因为考试之前是可以提前十分钟拿到试卷,但是不能动笔的。

我依稀记得好像确实是先拿到了试卷,但是不能动笔。至于是提前多久那就不记得了。

大佬说,有这十分钟,完全可以通过口算,把选择题和填空题做完。

是的,没听错,可以通过口算,秒杀高考数学绝大部分的选择题和填空题:

听的我一愣一愣的:这特么还是人吗?

这瓜越往后面吃,我越觉得人和人之间的参差是巨大的。在这些学神面前,我都不好意思说自己是学渣。

在我吃完瓜,写完文章之后,我发现答主更新了:

太遗憾了,居然没有把局组起来。到最后,还是只有三个人报名了。

但是答主表示明年还能再来,只要凑够十人我们随时可以开始。

那么,这个叫做“李笑”的、不在国内无法参赛的、看起来很厉害的用户,不知道到时候会不会迎战:

我相信你是个大佬,只不过你拿学历说事儿的样子,真的 low。

另外,我是真的想这个活动举办起来,有主办方,有赞助商的那种,然后全平台直播。

对了一定要有解说,不然我是真的看不懂。

虽然这些题我是不会了,但是吃瓜,我一定站在最前线。

0

评论区