你们要的代码来了!爬了菊姐的两万条评论——详细代码解读篇

第一时间关注程序猿(媛)身边的故事

作者

张俊红

如需转载,请联系原作者授权。

前言

上一篇文章

《爬了菊姐的两万条评论,竟发现菊粉都是这样的人!》

发出后,大家反响还不错。

在上一篇文章中之所以没带代码主要是因为我只想写一篇数据分析报告,咱们平常给领导看数据分析报告,肯定也不会把Sql代码、Python代码放在PPT中,给老板讲述每一行Sql代码是什么意思,所以就没有放代码。

但是大家都很爱学习,都想要代码学习学习,所以今天就专门来一篇讲讲代码。

在开始具体的代码讲解之前,我需要说明一下关于菊粉人数中摩羯座人数最多这个结论的一些争议,有人评论说微博用户如果不设置年龄的话,默认就是1月1,也就是摩羯座,所以摩羯座人数比较多。先来看两张图:

未设置年龄前的信息

设置个人信息

设置年龄后的信息

通过上面几张截图来看的话,如果未设置年龄时,并不会默认显示成摩羯座,所以应该就不存在大家说的那种情况。

还有所在地和家乡是可以选择则其他的,性别、年龄、星座是不可以选择其他。我们本次就是要获取这几个字段。

本篇主要分为三个部分:

数据获取

数据预处理

可视化图表制作

数据抓取

先讲讲数据抓取的逻辑,最终目的就是要找到,刚开始想的是直接抓取王菊的粉丝列表,但是后来发现微博数据有限制,只能抓取少量的粉丝列表,所以这个方案行不通,只能换下一个。

在小歪大佬的建议下,决定抓取王菊微博留言下面的用户,因为这些用户是和王菊有过互动的,要比那些只关注没有互动(这里的互动只指评论这一动作)的用户粉的程度要大,更有代表性。

所以最终的一个数据抓取思路就是:,具体实现代码如下:

获取每条微博评论url

我们先随便点击一条微博的评论进去,看看我们要的字段都在哪里。

最近一条微博的评论

可以看到,有评论,以及每一条对应的,找到了字段位置,我们再来看看这些字段对应url是什么,有什么规律。

微博评论url

通过查看这个url,我们大概可以猜出,id前面的部分应该是所有微博评论都一样的,id值是唯一的,每一个id对应一条微博,而page是表示一条微博的评论存放在多页里面,经过验证确实如此,而且page最大值就是100,100以后就不返回数据了。

所以接下来我们的目标就是获取每条微博对应的唯一id值。回到用户主页,

微博id

可以看到每条微博的发布时间,以及微博id,也就是只需要解析用户主页url就可以得到该用户的每条微博对应的id值。

获取到每条微博的id值以后,我们就可以获取到每条微博评论的url,具体代码如下:

获取每个user_id和comment

上面获取到每条微博评论的url以后,我们就可以直接请求对应的url,然后把和解析出来即可,实现代码如下:

获取containerid

获取到了user_id以后,我们再来看看我们想要获取的字段在哪,如下图,

用户信息界面

知道了我们想要获取的字段在哪以后,再看看这些字段对应的url是什么?

用户信息对应url

看到这个url以后我们又可以猜测,每个用户信息对应的url应该只有这两个值是不一样的,其他都是一样的,经验证,缺失如此,且值就是,是另外一个唯一值,所以我们接下来的目标是获取每个用户对应的。具体实现代码如下:

获取用户基本信息

知道了user_id以及containerid,我们就可以唯一确定一个用户的基本信息,具体实现代码如下:

最后的结果如下表:

用户信息表

可以看到,年龄和星座为空,并不是摩羯座,且当年龄和星座为空时,所在地就会错位到年龄列,接下来就做一些数据预处理。

数据清洗

数据清洗逻辑如下:

对于国家列为空,星座列不空且不包含座字,则认为是国家城市名,则把星座列赋值给国家城市列

对于国家列为空,星座列也为空,年龄列不为空且不包含岁或座字,则把年龄列赋值给国家城市列

对于星座列为空,但是年龄列包含座字,则把年龄列赋值给星座列

对于星座列不包含座的,全部赋值为“未知”

对于年龄列不包含岁的,全部赋值为“999岁”(为便于后续好筛选)

对于国家列为空的,全部赋值为“其他”

具体代码如下:

图表制作

主要讲讲这篇报告中涉及到的图表的制作,上一篇文章中的图表我是用的BDP做的,因为BDP做出来的要比python做出来的美观,而且方便,所以我就用了BDP,这篇主要是讲代码,所以就给大家用python实现一遍。

词云图制作

词云图制作是先把一大段话进行分词,分成若干个词语,然后对词语进行计数,最后挑选出出现次数比较大的那些词,绘制在同一张图上,且出现次数越多,字体显示越大,最终效果图如下:

菊粉留言

当然了,最后结果只是右半部分,左半部分是为了对比后期PS加上去的。具体实现代码如下:

这里分词没有用jieba分词,而是用了fool,据称是最准确的中文分词包,github地址:。

饼图绘制

饼图就很简单了,代码如下:

菊粉男女分布

柱状图绘制

先对年龄进行分区间,然后再进行统计绘制,代码如下

菊粉年龄分布

地图绘制

菊粉全国分布

上面地图绘制主要是用的Python中的,解析地理位置用的。

Top省份和Top城市就是两个柱状图,制作方式和上面的年龄分布类似。

树地图绘制

星座显示的这种可视化形式叫做树地图,主要用的,实现如下:

菊粉星座分布

自定义词云图

上面从各个字段介绍了菊粉的特质,最后该来个总结了,总结的形式很多,还是选择词云图的形式,只不过这里不需要进行分词,直接手动输入你要显示的词,以及词的权重(频次)即可,具体代码如下:

菊粉画像

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180709A0TDUO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券