元卫南究竟收到了多少打赏?

这篇文章首发于公号《猫玛尼》

大家好,我是“猫玛尼”,一名程序员。

昨天有位读者留言,说起“有人用爬虫统计元卫男 收到的打赏金额”。我之前也逛过雪球,所以知道他说的那个人,叫元卫南,他的留言里面是写错字了。所以最终这个事情叫做:统计雪球大V元卫南收到的打赏金额。

我喜欢技术也喜欢钱,觉得这个事情蛮有意思的,所以我也来尝试一下。声明一下,没有对元卫南大V不敬,也不想引起什么误会,纯粹是学术+爱好的结合,如侵则删。

对技术不感兴趣的直接拉到文末看结论就行。

虽然使用Python的Scrapy框架会很方便,不过有些不了解它的人可能会有点懵,所以我决定不使用爬虫框架,直接用Python的requests类库来完成这个任务。

雪球,是一个投资理财论坛,可以发帖,看到帖子的人可以根据个人喜好,对楼主点赞、评论和打赏。

雪球,有登录功能,因为登录会增加整个任务的复杂度,所以我先考虑简单的不登录的方式能不能拿到数据,能拿到则最好,不能则继续走登录的方式。

第一次讲解爬虫的具体案例,我会讲的细致一点。

打开Chrome浏览器,打开“开发者工具”,并切换到“Network”Tab页面。使用“开发者工具”可以很方面的调试网页,获取更多的信息。我是直接使用快捷键“option+command+J”打开的。Mac Pro笔记本怎么打开,见下图:

然后,在顶部的网址输入栏,输入网址“https://xueqiu.com/”,由于我们的目标非常的明确:统计雪球大V元卫南收到的打赏金额。那么我们直接在雪球网的搜索框输入“元卫南”,然后找到他的原创帖子列表(这个就是我们常说的爬虫入口),并观察“开发者工具栏”中的“Network”Tab页面的请求数据。具体如下:

可以很清楚的看到,里面只有一个正常的请求“https://xueqiu.com/statuses/original/timeline.json?user_id=2227798650&page=1”,这里其实可以做一些额外的分析,比如我们可以猜测2227798650这个user_id代表的就是元卫南,page=1表示的是们目前处在分页列表的第一页。这个请求返回的是一个Json格式的数据。以我的经验,Json数据,是最友好的,对后续的数据处理很方便,而且据我观察,Json数据的格式,一般不会变化,比较稳定,有效的缩减了我们以后的维护精力。

直接观察列表,发现只有标题、摘要、发布时间、阅读量,并没有文章的打赏数据。那么我们再看看刚才发现的那个请求的Json数据,里面有没有打赏相关的数据。Json数据的最小单元,截图如下:

不需要太强的英语能力,就能分析红圈里面的各个字段。再观察里面有没有类似打赏信息的字段,发现并没有。看来打赏数据并不在列表里面,那么我们可以得出初步的结论,打赏数据基本就在列表点进去的帖子详情里面。

为了提高我们的效率,我们需要多看几个帖子,找到那种有打赏的,且最好打赏还比较多的那种帖子。

怎么找这种帖子也是一门学问,我是这么想的,阅读量大,说明基数大,那么一般来说打赏的可能性也就大,那么打赏的数据也就多了。这是一种提高做事效率的合理推测,虽然存在反例来打我脸,但这并不影响,我们如此去思考问题。

我向后翻阅他的原创列表,发现在第二页就有阅读量很高,且标题也比较引人注意的一片文章。直接点进去,运气不错,有20个人点赞。截图如下:

我发现,雪球基本都是Ajax动态请求服务端API加载数据的,这就让我比较方便了,哈哈哈……

我们继续分析这些请求,找一下到底是哪个请求返回了打赏数据。

很巧,第一个接口“https://xueqiu.com/statuses/reward/list_by_user.json?status_id=116503994&page=1&size=20”里面就有,而且让我高兴的是,他居然有一个打赏总额的字段,不过经我测算,打赏总额字段的值,跟每个人打赏金额加起来的总和,总是相差1%,我猜测可能是雪球平台拿走了这1%,剩下99%是给原创坐着的(这个1%的说明,后来我在雪球的公告里面找到了)。这个接口跟分页相关的两个字段page、size,经过分析我们知道是打赏的分页列表,所以如果要用一个一个对打赏相加的方式来计算这个帖子的打赏总额的话,还要考虑分页的问题,不是不可以做,只是会比较麻烦。不过这里显然不需要这样繁琐,因为我前面说了,已经有了一个总金额字段,只是相差1%,这个最后我们计算的时候考虑进去就行。

这里面还有个关键字段“status_id”,这个值其实就是列表数据API里面的ID值。所以这个接口我们就很好仿照了,“https://xueqiu.com/statuses/reward/list_by_user.json”这部分不用变,后面的参数status_id的值取自列表数据API的ID,由于我们不需要做分页捞取数据,是直接使用“reward_amount”的值,那么page就固定为1,size固定为20,就行。

雪球上面这几个接口的金额数据,都是乘上了100,所以在最后的时候我们要除以100,这个要记住。

到这里,思路就清晰了,我们只要遍历元卫南的所有帖子,把每个帖子的打赏金额加起来,就是元卫南收到的打赏总额。

理清楚了思路,接下来就是写代码了啊。

先写个列表API数据的模拟请求代码,运行了下,直接报错了啊……

看报错信息,是在25行Json解析返回数据的时候出错了,我拿URL直接去从来没有登录过雪球网的火狐里面请求,也是直接是报错:

直觉告诉我,我前面以为的不需要登录是错的,实际是需要用到登录后的cookies信息,才能正常访问API的。那么为什么我开始的时候,在Chrome就可以直接访问呢?原来之前我是一直都用Chrome登录雪球网,查看我的自选股什么的,浏览器帮我保存了相关cookies在我的电脑上,如果我清除浏览器数据,效果就会和在从来没登录过的火狐一样。既然如此,那我就在Chrome拿到我的cookies数据,继续编写我的代码。模拟请求带上cookies就成功获取到了数据。

其他的,就是具体的代码实现了,比如列表分页、每一页列表的每一项数据获取等。具体直接上代码(今天比较临时,后续我打算将整理后的代码放到我的github上面):

代码太乱了,下次看看怎么贴代码。

最终统计到的信息如下(截止2018-12-10):

收到的打赏金额为:25317.10 元

球友打赏的总额是:25572.83 元

雪球收取的服务费:255.73 元

(最后一位有四舍五入)

“统计雪球大V元卫南收到的打赏金额”,只是很多类似事情里面具有代表性的一件,还有其他比如:统计某个大V的每篇文章的阅读数,统计阅读数最高的那些文章的标题经常出现的词是什么,通过统计这些文章的点赞、转发、收藏等情况,判断一个帖子的热度,还有行情相关的数据,股票关注的热度等等……只要有想法,数据在,一般都是可以去好好挖掘的。

本文涉及到了具体的一个大V——元卫南,我没有恶意,纯属技术交流,如侵则删。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,928评论 2 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 程序员转职,当然是内部转职,比如PHP程序员转职Javascript程序员,Java程序员转职Python程序员等...
    phithon阅读 1,524评论 0 4
  • 我抬起头来 阳光洒在我脸上 我知道八千里外 ...
    清角z阅读 152评论 0 0
  • 虽然忙,今年倒是看了不少电影,最推荐的新片当然是豆瓣9.1的摔跤吧爸爸,其次是豆瓣8.5的敦刻尔克,二者都特别激励...
    何如一醉尽忘机阅读 309评论 0 0