全文共2696字,阅读全文需10分钟



大家好,我是小一同事微博涨粉200+,一顿分析真爱粉只有4个??_数据

事情是这样的,同事小A说他最近微博涨粉老快了,但是自己还是和以前一样就偶尔发发动态,看看新闻吃吃瓜,也没买啥涨粉包之类的。

小A说这话的时候稍显淡定,但是小一清楚的看到小A的嘴角微微上扬,不禁撇了撇嘴。

可能是以为我不信他最近涨粉老快这件事,小A随后发来了这张图:

同事微博涨粉200+,一顿分析真爱粉只有4个??_公众号_02

好家伙,小A他总共粉丝才几百人,这七天就涨了一百多,微博涨粉这么容易的?

要不我也换个阵地试试?这速度比小一现在的公众号涨粉快多了同事微博涨粉200+,一顿分析真爱粉只有4个??_公众号_03

这个时候小A又补了一句:“这只是近七天的,之前一周的更多呢!”说完这话,小A转身潇洒而去。

这家伙在炫耀!绝对是!

话说微博小一也有在玩,但是确实很少涨粉,粉丝基本都是一些认识的朋友,除非是:

僵尸粉

其实小A也怀疑自己突然多的粉丝可能是僵尸粉,但是一个一个去检查似乎有点浪费时间。

于是在小A的请求下便有了下面的故事

强烈建议下面步骤在征得同事的同意下进行,不然可能会被打

获取粉丝数据

小一之前也写过微博的爬虫,大概爬了几十万条的土味情话和一些gif图,所以大概知道获取微博粉丝列表应该这样做:

  • 获取用户的总粉丝数,计算运行次数
  • 解析每页的粉丝列表,获取粉丝数据
  • 通过粉丝uid构造粉丝主页链接url
  • 爬取粉丝的详细数据

要检测粉丝到底是不是僵尸粉,可以通过粉丝的粉丝数量、微博动态数这些数据

但是好像不够全面,所以在上面第④步小一获取每个粉丝的详细数据,例如简介、签名、性别等,其中最重要的是获取到该粉丝最近一次的发博情况。


这里面会用到两个链接,一个是微博用户主页信息的链接,一个是粉丝翻页链接,分别如下:

用户主页信息url:

url_master = "https://m.weibo.cn/profile/info?uid=" + uid

粉丝翻页url:

url_fans = "https://m.weibo.cn/api/container/getIndex?containerid=231051_-_fans_-_{0}&since_id={1}".format(uid, index)

【左右滑动查看更多】

注意:

uid是微博中每个用户默认的id唯一编号,我用的是小A的uid,在他的微博主页拿到的。

翻页的时候因为是一页默认20个粉丝,所以index应该是0、20、40这样子的


流程不难,篇幅有点多,所以就不贴具体的实现函数了,你可以在后台回复“微博粉丝”获取所有源码

大致的主函数代码如下:

if __name__ == '__main__':
uid = '用户uid'
"""获取详情数据"""
master_info = get_master_info(uids=uid)
print("用户id:{0},发博数:{1},关注{2}人,拥有粉丝{3}人".format(
uid, master_info['statuses_count'], master_info['follow_count'], master_info['followers_count']))

"""设置最大页数"""
fans_count = master_info['followers_count']
# 由于当page大于250时就已经无法得到内容了,所以要设置最大页数为250
max_page = fans_count//20 + 1 if fans_count < 5000 else 250

# 爬取数据
fans_data = pd.DataFrame()
for i in range(max_page):
index = i*20
url_fans = "https://m.weibo.cn/api/container/getIndex?containerid=231051_-_fans_-_{0}&since_id={1}".format(uid, index)
data_per_page = get_page_info(url_fans, i)
fans_data = fans_data.append(data_per_page)
sleep(3)
fans_data.to_csv('weibo_{0}_fans_1.csv'.format(uid), encoding='gbk', index=False)

"""爬取每个粉丝的详情数据"""
for fans in fans_data.iterrows():
fans_url = "https://m.weibo.cn/profile/info?uid=" + str(fans[1]['用户id'])
fan_info = get_fans_info(fans_url)

# 获取并更新每个粉丝最近的一条微博动态
fans_data.loc[fans_data['用户id'] == fans[1]['用户id'], '总动态数'] = fan_info['statuses_count']
fans_data.loc[fans_data['用户id'] == fans[1]['用户id'], '最近一次发博日期'] = fan_info['created_at']
fans_data.loc[fans_data['用户id'] == fans[1]['用户id'], '最近一次发博内容'] = fan_info['text']
fans_data.loc[fans_data['用户id'] == fans[1]['用户id'], '最近一次发博终端'] = fan_info['source']
fans_data.loc[fans_data['用户id'] == fans[1]['用户id'], '签名'] = fan_info['description']
fans_data.loc[fans_data['用户id'] == fans[1]['用户id'], '性别'] = fan_info['gender']
sleep(3)

# 保存数据
fans_data.to_csv('weibo_{0}_fans.csv'.format(uid), encoding='utf-8', index=False)

【左右滑动查看更多】


分析粉丝数据

按理说显示一个人有多少粉丝就能获取多少个,但是实际上并不是。

上面代码的运行截图如下

同事微博涨粉200+,一顿分析真爱粉只有4个??_数据_04

【爬取粉丝数据】

可以看到,有的页面粉丝数不足20人,可最终获取到小A共348个粉丝信息。

因为小A是从最近开始疯狂涨粉,所以通过分析粉丝列表小一发现粉丝最近一次发博情况似乎出现了断层

同事微博涨粉200+,一顿分析真爱粉只有4个??_保存数据_05

【厚码,保卫我方小A同学】

因为最近一次发博为空证明没有发过微博(或者设置不可见),而且通过粉丝数也可以看到只有个位数的粉丝,并且大部分的微博动态数为个位数,应该是我们要找的僵尸粉。

所以小A的粉丝中红框下面的都是正常粉丝,上面的极有可能是这段时间的涨粉造成的。

ok,那大概可以确定上面这两百多个粉丝就是我们要分析的对象。

注意:下面提到的“问题粉丝”就是我们筛选出来的首要分析对象


首先看下他们的粉丝数分布

同事微博涨粉200+,一顿分析真爱粉只有4个??_数据_06

拥有1个粉丝的问题粉丝占比61.62%,我记得微博刚注册“新手指南”会默认关注你,不会这122个问题粉丝都是刚注册的?

再看下问题粉丝的发微博数量

同事微博涨粉200+,一顿分析真爱粉只有4个??_公众号_07

119个问题粉丝从来没有发过微博,占总问题粉丝的58.6%,这部分问题粉丝应该是真的有问题了


接下来,我们从问题粉丝中筛选发博数大于0的粉丝进行分析,究竟他们是不是也有问题?

首先,从他们的性别来分析:

同事微博涨粉200+,一顿分析真爱粉只有4个??_公众号_08

性别分布很均匀,似乎也看不出什么问题。

看一下发博用户的最后一次微博是什么时候发的:

同事微博涨粉200+,一顿分析真爱粉只有4个??_数据_09

可以看到,最早的是2013年,wtf?上一次发博竟然是6年前?这老僵尸了吧。

然后可以看到在很多粉丝的上一条微博是在今年的11月更新的,似乎又不像是僵尸粉。

再来看一下发博粉丝的发博内容:

同事微博涨粉200+,一顿分析真爱粉只有4个??_保存数据_10

找到问题了,其中有35%的是广告推销,其中不乏有像双十一、领红包、直播间推荐等各种推销用于;另外有18%的是转发别人的,只有不到一半的可能会是正常微博。

既然是正常粉丝,那也应该是有粉丝的,看一下发博粉丝的粉丝分布:

同事微博涨粉200+,一顿分析真爱粉只有4个??_保存数据_11

果然,粉丝数大于个位数的发博粉丝占比不到一半。

最后,通过筛选上一次发博是在近一年、发博内容不是广告和转发、粉丝数大于10的发博粉丝,最终,筛选出来了4个粉丝

同事微博涨粉200+,一顿分析真爱粉只有4个??_公众号_12

近两百个新增粉丝中,只有4...4...4个人是真粉!


看到这个结果小A面色阴沉,真实的数据摆在眼前,原来自己近期涨的粉丝98%都是僵尸粉

“果然,天上掉馅饼肯定是有原因的,因为这馅饼,就不是真正的馅饼!”

说完这话,小A甩手仰天长啸而去。



写在后面的话

本故事不是虚构,但是你可以当个故事来看

最后小一哥为了安慰小A受伤的心灵,决心和他一起找出涨粉的源头所在

直到,小A在他的私信里面发现了这个:

同事微博涨粉200+,一顿分析真爱粉只有4个??_公众号_13


如果你微博也有收到这个提醒,那,请你注意,一大波僵尸粉即将袭来

请一定保护好自己即将受伤的心灵


最后,本节爬取粉丝信息的源码已经整理完毕,后台回复“微博粉丝”获取。







我是小一,当你走遍所有失败的路,最后一条就是成功之路

期待你的三连​!​ 我们下节见