美文网首页Python 爬虫专栏基本技能产品与务实
爬取张佳玮138w+知乎关注者:数据可视化

爬取张佳玮138w+知乎关注者:数据可视化

作者: 古柳_Deserts_X | 来源:发表于2017-07-30 23:10 被阅读6023次

    一、前言

    作为简书上第一篇文章,先介绍下小背景,即为什么爬知乎第一大V张公子的138w+关注者信息?

    其实之前也写过不少小爬虫,按照网上各种教程实例去练手,“不可避免”的爬过妹子图、爬过豆瓣Top250电影等等;也基于自身的想法,在浙大120周年校庆前,听闻北美帝国大厦首次给大陆学校亮灯,于是爬取2016-2017年官网上每日的亮灯图并用python的PIL库做了几个小logo,算是一名吃瓜群众自发的庆贺行为;(更多照片见于:Deserts-X 我的相册-北美帝国大厦亮灯图:ZJU_120 logo

    北美帝国大厦亮灯图:ZJU120

    也因为喜欢鲁迅的作品,爬过在线鲁迅全集的全部文章标题和链接;另外听说太祖的某卷书是禁书,于是顺带也爬了遍毛选;还帮老同学在某票据网站下线前爬了大部分机构、人员信息,说是蛮值钱,然而也还在留着落灰......

    微博签到数据点亮中国

    再是知道百度Echarts开源的可视化网站里面的图很酷炫,比如使我着迷的:微博签到数据点亮中国,于是想着可以爬取微博大明星、小鲜肉的粉丝的居住地,然后搞搞怎么画出全国乃至全球分布情况。但发现几年前微博就限制只能查看200左右粉丝数(具体忘了),蛮扫兴的,于是将目光转向了知乎......

    而既然要爬,那就爬关注人数最多的张公子吧,数据量也大,这方面是之前小项目所不及的,此前也看过不少爬知乎数据与分析的文章,因此也想练练手,看看大量访问与获取数据时会不会遇到什么封IP的反爬措施,以及数据可视化能搞成什么样。

    不过此文在爬虫部分不做过多展开,看情况后续再另写一文。思路如下:抓包获取张佳玮主页关注者api,然后改变网址中offset参数为20的倍数,一直翻页直到获取138w+关注者信息,其中返回的json数据主要有:关注者的昵称、主页id(即url_token)、性别、签名、被关注人数等,也就是说需要访问所有主页id,才能获取更多信息(个人主页api:以黄继新为例):居住地、所在行业、职业经历、教育经历、获赞数、感谢数、收藏数等等。鉴于还不怎么会多进程爬取,如果把所有id再爬一遍会非常耗时间,于是筛选被关注数100+的id,发现只剩了4.1w+,之后较完整提取了这部分的信息,后续可视化也多基于此。

    爬取信息一览

    二、数据可视化

    1、关注人数

    大V总是少数的,而小透明到底有多少、分布情况如何呢?将关注人数划分成不同区间,绘制成如下金字塔图:

    作为一只小透明,在此过程中发现自己处于前2w的位置,即图中红色区域,还是蛮吃惊的。上文已提到100+关注就超过了134w的用户,而1k+、1w+、10w+就越来越接近塔尖,越来越接近张公子的所在,看上图10w+以上的区域,如同高耸入云,渺然不可见,“乱山合沓,空翠爽肌,寂无人行,止有鸟道”,令小透明很是神往。

    上升之路虽然崎岖,但也同样说明只要多增几个关注,就胜过了数以万计的用户,这对于有志于成为大V的人,或许能在艰难的前行之路上,靠此数据透露的信息,拾得些许信心。

    细看底部的区间,0关注有40.2w+,1-10关注有76.6w+,区分度已赫然形成,但小透明可能感受不出,那怕有几百的关注,何尝不会觉得自己依旧是个小透明呢?有谁会相信斩获10人关注,就超过了100w+的用户,数据能告知人经验之外的事实,在此可见一斑。当然知乎大量用户涌入且多数人并不产生优质或有趣的回答,也是一二原因。

    继续看100+以上的数据,底部占比依旧明显,塔尖依然很小。

    2、性别情况

    接着对100+关注人群的性别组成进行分析,发现男女比例基本维持在2:1,与138w+用户的男女比例差别不大。当然10w+关注由于人数较少,比例超过3:1,是否能得出男性在这方面更为优秀就不得而知了。

    3、10w+大V

    前文已多次提到10w+大V,那么这190人里到底都有谁呢?这里以关注人数为权重,生成词云如下:

    大家上知乎的话应该也有关注一些大V,许多名字应该并不陌生,比如马伯庸、动机在杭州、葛巾、朱炫、丁香医生等等,当然也会发现并不是所有大V都关注了张公子,哪怕他是知乎第一人,目前已交出了3026个回答,135个知乎收录回答的傲人成绩(据说也是豆瓣和虎扑第一人)。

    4、居住地分布

    终于到了我最初开始这个项目时,最想获取的的信息了。虽然由于爬取效率而筛选掉了100关注以下的id共134w,数据量方面不如标题所示的那么多,略有遗憾,但其实真的拿到4.1w+条较优质数据时,发现处理起来也并不容易。

    比如这里的居住地信息,有乱填水星、火星、那美克星,也有填国家、省份、县市、街道格式不一的,还有诸如老和山之类外行人不明白的“哑谜”等等,数据之脏令人头疼,且纯文本的数据又不像数字类可以筛选、排序,还没想到好的方式应对。再者Echarts官网虽然有不少可以套用的模板,但有很多地方的经纬度需要重新获取,这样就在数据处理和地图上定位有两处难题需要解决。

    由于第一次处理这类数据并可视化,第一次用Echarts就打算画这个酷炫的地图,因此最终先缩小数据量,还是以1w+大V的数据来可视化,目前先完成国内分布情况,以后看情况再扩大数据量和绘制全球分布情况。

    其中出现次数排名前几的城市依次为:北京 360,上海 183,深圳 55,杭州 52,广州 47,成都 26,南京 20......应该算是意料之中的。考虑到并不是每个人对这些点所代表的城市都熟悉,加上城市名,效果如下,重叠较为严重,显示效果不够好,仍需解决。

    5、Top20 系列

    接下来分别对所在行业、职业经历、教育经历等进行分析,结果如下(注:用户有多条职业经历或教育经历的,仅爬取了最新的一条数据):

    学校方面几乎全为985、211高校,当然拿得出手的会乐于写上,略微差些的可能不会填写,而且涌入用户多了后,这类数据也就只是调侃知乎人人都是985高校,年薪百万的点了。所在行业方面,互联网遥遥领先,计算机软件、金融、高等教育位居前四。

    Top20 公司中BAT、网易、华为、小米科技、美团网以及谷歌、Facebook、微软等大厂都悉数在列。再看Top20 职业里除了各种名号的程序员、产品经理、运营等互联网职业,创始人、CEO等占据前排,不可谓不令人大惊从早到晚失色。

    6、认证信息

    原本只知道博士可以提供信息得到认证,知乎也会给予其回答更好的显示途径,使其更容易成长为大V,以此作为对高学历人群、优质用户的奖励。

    此次抓取的100+关注4.1w+条数据中有208条认证信息。除却各种专业的博士、博士后外,还有37家公司、机构,9条医师,11条教授/讲师/研究员,13条CFA、CPA持证人或工程师、建筑师,以及副总裁、创始人、记者、律师、WCG2005-2006魔兽争霸项目世界冠军、职业自行车手、主持人、作家等等。看来还是有不少可以后续去了解下优质用户的。

    7、优秀回答者

    除了认证信息外,优秀回答者这是鉴别某用户是否为优质用户,是否值得关注的一个重要指标。包含张佳玮在内,共有468位优秀回答者,涉及257个话题,共出现768人次优秀回答者标签。

    涉及的257话题词云

    而所有优秀回答者贡献的回答和知乎收录回答情况如下:

    最右上角的便是张佳玮的贡献情况,令人望尘莫及。也有不少用户贡献了上千个回答,可以说是非常高产。但大部分用户回答数<1000,收录数<50。因此对此区域放大,可见:

    有不少数据收录回答为0,因为还不知道知乎优秀回答者的评判标准,所以此处还需进一步了解。另外这些数据点,对应的加上一些大V名字可能显示起来能好,但一直在摸索,还不得要领。

    三、小结

    本项目是个人第一次百万级数据的爬取,当然由于爬取效率方面需要改进,所以详细用户信息选择性的只爬了100+关注人数共4.1w+的id。另外也是第一次数据可视化,从完全不懂Echarts的各种参数,硬刚配置项,到勉强获得了上述还算能看的一些数据图,不少地方还需进一步学习、改进,以求获得更合乎要求的、理想的、自定义的可视化图。

    另外,除却上述数据外,还有点赞数、感谢数、收藏数、关注数和被关注数、签名、个人简介等等数据并未处理,但基本想要获取的图都得到了,算是完成了此项目,也学到了很多东西。

    相关文章

      网友评论

      • b8b401e7ec95:牛逼
        古柳_Deserts_X:@新_26a2 嘿嘿嘿
      • 621ac3b1b1db:不知道楼主是做什么工作的?本人对爬虫和可视化也非常感兴趣!
      • 布利啾啾的布利多:可视化值得一学😂
      • 22f4a4c166d9:大佬,能不能上传部分关键代码,这样粉丝们可以大致按照你的思路实现。谢谢
        古柳_Deserts_X:@bigfour 如果你对可视化部分感兴趣的话,本文连同其它文章用到ECharts绘图的代码和图表都已经吐血整理到一起喽,见《图表太丑怎么破,ECharts神器带你飞!》http://www.jianshu.com/p/da1367b71985。爬虫的代码,因为最近都在爬知乎各类数据,还在进行或许之后会讲讲。
      • 卜地锦::sweat: 我这两天也在抓张佳玮的粉丝数据,现在有142万条了,貌似一小时抓六万条就是知乎的红线,速度高一点就返回503,来回折腾好几次了
        古柳_Deserts_X: @卜地锦 就喜欢你野心辣么得大
        卜地锦:@Deserts_X 还没想好,据说知乎有6500万注册用户,我想把大部分用户爬下来
        古柳_Deserts_X: @卜地锦 厉害了,打算怎么分析
      • DoctorLDQ:能分享一下这些图是用什么做的吗
        古柳_Deserts_X: @DoctorLDQ 😂分享了呀。文中、回复其他人的评论都有讲到用百度ECharts绘制的,直接百度里面有例子有图有代码啥都有的,不过是JS代码。
      • 浪费了昨天:这个词云是exharts做的吗,我怎么没找到😂
        古柳_Deserts_X:@浪费了昨天 词云的话,我记得官网也有的。不过我这个是另外一个网站直接文字丢上去就能给出结果,不用分词,统计等预处理,虽然自动给出的数据也会有很凌乱的内容。你在爬什么呢
      • loopq:嘿,你好。我想问一下你的是使用pyecharts 给数据 还是直接上手 echarts调数据?
        loopq: @Deserts_X 好的
        古柳_Deserts_X:@daisy123 官网上找好看的图,然后处理成对应数据,改参数
      • 96cd3cd69574:初看文章我以为是技术贴,以为要讲具体这么实现爬数据的。第一感觉是用java好像很难爬,后面看评论才知道是用的Python,我居然不知道Python也能用echar,是我太无知了。
        古柳_Deserts_X:@JavaDog 爬虫用的python,技术方面再加进来内容就太多太乱了,还是习惯分开写。echarts直接官网上找实例,然后各种改参数,讲数据用python处理成相应的格式。
      • DayDayUpppppp:楼主 能不能谈一下技术细节 或者 在Git上提供一下 源码 让大家学习一下
        古柳_Deserts_X:其实代码特别简单,因为没涉及多线程多进程,没涉及数据库,没涉及url或id去重等等,所以效率方面不行。其实也可以另写一篇讲讲,但需要各种截图和红色标记出重点,还有技术的点含糊不得,所以也有点懒得写,我在看看,克服下懒癌吧,现在在新的一个爬的项目==。
      • 古柳_Deserts_X:原本想晚上写写爬取过程及代码,讲讲抓包和找到两个返回JSON数据的API等等,然后各种截图,真的兴致不是很高,还是更喜欢自己爬,自己写可视化。不喜欢写过程。懒
      • 4c8d3847c800:楼主用的是什么语言?能看下代码吗?
        古柳_Deserts_X:@一个人的月光 另外感觉要各种抓包过程截图,稍微有点懒2333
        古柳_Deserts_X:@一个人的月光 python的爬虫。我还在考虑要不要另写一篇文章讲爬取的细节,因为感觉代码写的并不好,写上来在大佬面前会蛮不值得一提,而且没用多进程,效率不佳,或者说试了下多进程发现写入数据时很混乱,于是取消了。
      • 苟且偏安:Echarts好强大
        古柳_Deserts_X:@彪飙 是的呀。不过第一次上手可视化,各种调参数也是略感心累,勉强绘制了上面的图。
      • 浅影科技:果断学爬虫
        古柳_Deserts_X:@IFTC 直接在这回复你的私信吧。爬虫的书《python网络数据采集》和《用python写网络爬虫》这两本还蛮多人提,但我只看过后者,是在听了董伟明知乎live后看的,但主要学习还是看网上的文章,博客,爬虫系列教程等等,当然良莠不齐,需要辨别和筛选,以后看情况我也整理下我看过的那些内容吧,算过帮大家的一个筛选。再是数据清洗,不太清楚你指的是爬取网站时提取想要的信息,还是指爬下来后用numpy,pandas等库处理,论理应该指的是后者,那还是看文章或者官方文档吧。但你是初学爬虫似乎指的是前者提取信息吧?
        浅影科技: @Deserts_X 最近就在学习,我学的是python,刚学爬虫
        古柳_Deserts_X:哈哈,可否一问:是之前就有学的念头,还是看了本文才想学的呢。

      本文标题:爬取张佳玮138w+知乎关注者:数据可视化

      本文链接:https://www.haomeiwen.com/subject/mnkklxtx.html