爬取知乎60万用户信息之后的简单分析


(smartpig) #1

使用 Java+Elasticsearch+Kibana 爬取了知乎 60 万用户数据,做了简单的可视化分析。

项目源码 [GitHub - webporter]

  • 动机

在知乎上看到有个叫 @路人甲 的大神每隔一段时间就爬爬豆瓣/B站等等网站,做了很多有意思的分析,加上之前因为实验室项目接触过 Nutch,浅尝辄止了,所以一直想好好玩玩爬虫。

网上 Python 的爬虫教程很多,而自己的主语言是 Java,本着宣传 Java,以练促学的目的,我使用 Java 爬取了知乎 60 万用户信息,主要想看看知乎上妹子多不多啊/是不是都是基佬啊,标配常青藤/年薪百万是不是真的啊,等等。

  • 思路

为了保证数据的质量,避免爬到一些僵尸号什么的,我选择爬取关注列表而非粉丝列表。我随机挑选了一位粉丝过千的优秀回答者作为起始,爬取他的关注列表,再对列表中的每个人爬取其关注列表,以此类推……

下载了大概 7 个小时,爬了 40 多万用户的关注列表,拿到了 10G 的数据,如图所示:

![](data:image/svg+xml;utf8,)

理论上有 800 多万用户,可惜有很多重复的,去重后将数据导入 Elasticsearch,得到 60+ 万用户数据:

![](data:image/svg+xml;utf8,)

  • 数据验证

接下来简单看看下载下来的数据靠不靠谱,随手在知乎和我的 Kibana 分别搜了下轮子哥 @vczh

![](data:image/svg+xml;utf8,)

![](data:image/svg+xml;utf8,)

可以看到,连同名的都搜出来是一样的,数据没啥问题。

  • 关心的数据

然后使用 Elastichearch 的聚合查询配合 Kibana 对数据进行可视化展示,我主要分析了下面几个问题:

  • 性别分布

  • 粉丝最多的用户top10

  • 员工最多的公司top10

  • 校友最多的学校top10

  • 人数最多的地方top10

  • top10行业分布

  • top10职业分布

图中涉及性别的, 1 表示男,0 表示女,-1 表示不男不女(更正:性别未知)

  • 性别分布

![](data:image/svg+xml;utf8,)

可以看到知乎男性人数过半了,比女性和未知性别加起来都多。

  • 粉丝最多的用户top10

![](data:image/svg+xml;utf8,)

粉丝数前 10 的依次是 @张佳玮@李开复@黄继新@周源@yolfilm@张亮@张小北@李淼@葛巾@采铜 。最多的 120 万粉丝,第十也过 60 万了。另外前十里好几个都是知乎员工,有意思。

  • 员工最多的公司top10

![](data:image/svg+xml;utf8,)

可以看到 BAT 全部上榜了(乱入了一个学生什么鬼?),仅接着是网易,华为,谷歌,微软,美团。都是牛逼哄哄的互联网相关企业,看来国企和实体企业比较低调,不在知乎填公司信息啊。

另外华为的男女比简直不能看啊,妹子那么少,想去华为的单身狗们需要好好考虑一下了。

  • 校友最多的学校top10

![](data:image/svg+xml;utf8,)

差强人意,校友人数排名前十的全特么是 985 啊,清北复交浙全部上榜,俨然中国大学排行榜。看来知乎标配不是常青藤,而是 985 嘛。另外可以看到,我科(倒数第三个)的男女比在这几个里面确实感人,难怪我现在还单身…

  • 人数最多的地方top10

![](data:image/svg+xml;utf8,)

北京独领风骚,上海紧随其后。另外知乎居然把深圳和广州根据有没有“市”标记为了两个城市,简直坑爹,我也懒得二次处理了。综合来看,北上广深杭,主要集中在这五个城市,基本也是我国互联网企业分布最多的几个城市。

  • top10行业分布

![](data:image/svg+xml;utf8,)

可以看到,互联网和计算机软件两个加起来就占了半数以上,要是算上电子商务和电子游戏等基本是程序员的天下了,所以知乎上程序员偏多,IT 从业者占主流啊。

另外互联网的男女比大概 2:1 的样子吧,法律,信息传媒和创意艺术的男女比比较均衡,大概五五开。

  • top10职业分布

![](data:image/svg+xml;utf8,)

将近四分之一是产品经理,创始人和 CEO 也不少,比工程师还多,学生也占一定比例。另外除了运营和编辑的男女比差不多,其它都是男多女少啊。

  • 结语

从这 60 万用户数据可以看出,知乎的主要群体是程序员和学生,平均学历 985 不是黑,是真的!虽然知乎用户远不止 60 万,这些数据分析出来的结果可能有些偏差,但应该也能说明一些问题吧。

最后按照国际惯例,附上源码链接[GitHub webporter]: https://github.com/brianway/webporter

2016.12.20 By @Brian Way

转载须知

  1. **转载须注明出处、作者以及原文链接,且禁止任何形式的增/删/改
    **
  2. 非商业用途随意转载,无需通知;微信公众号/商业用途须获授权并付费转载

-------------- 2016.12.21 更新------------

我把下载的原始数据传给了 @路人甲 ,去重压缩后大概800+M,他整理上传了。如果你是数据爱好者,想要拿这份数据去分析,关注公众号:“一个程序员的日常”,回复关键词:“知乎数据”, 可获取全部数据。

写这个项目过程中向太阁群里的小伙伴们请教讨论过,在此一并感谢。今天还在评论里活捉了co-founder @冯沁原 老师,好开心!

-------------- 对评论统一回复 ------------

大家很热情,对分析的结论提出了很多看法,在这里对评论里的交流进行统一回复:

1.我的初衷是抱着练手的目的,过一遍流程,娱乐为主,顺便简单分析下数据以供消遣;

2.数据的取样方法在“思路”一节提到了,确实只取样了所谓的“精英用户”,不排除以偏概全的可能。(然而不知道为什么我这个小透明居然也被自己爬到了);

3.样本较小,总共才爬了60万(懒得下载了),远没达到知乎实际总量,仅供参考,这点在“结语”部分早提到了;

4.很多用户信息没填完整,确实有学校不著名就不写/学校好一点就写的因素,很好理解;

5.我做的时候没遇到任何知乎反爬方面的限制,可能知乎以后会加强反爬,别摔锅给我啊;

6.有人问我做这个需要什么基础,可以参考我的另一个回答 你如何总结自己的 2016 年?

7.最后,希望大家享受 coding,快乐学习,不要太较真哈~