前言
相信大家微博粉丝列表里面都拥有很多粉丝吧,但是仔细观察这些粉丝,你会发现很多都是僵尸粉,真正有效的粉丝少之又少。我们平时看到一些大V用户粉丝都是几十万几千万的,但到底真正的粉丝是不是有那么多呢?今天我们就来选取其中一个大V用户,然后分析他的粉丝。
前期分析
在电脑访问新浪微博移动端(m.weibo.com),然后找到你想进行分析的用户。电脑端不能直接打开粉丝列表,我们就借助json中的粉丝地址进行访问。
图1 关注列表和粉丝列表的地址
我们在Network中找到粉丝页的JSon文件。
图2 粉丝数据所在的JSon文件
然后看到Headers部分,记住Request URL。第一页的地址往往跟后面是不同的,后面一般多了页面id。
图3 Headers
开始爬取
由于用户名里面可能会出现特殊表情(tk字符),导致Python因为无法识别这些字符而出错,所以要进行处理。
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
由于微博的反爬虫可能会导致页面连接失败,所以要设置重试次数(这里设为3次),并且采用循环爬取(爬取微博内容必须循环爬取,否则会经常出错)。
from requests.adapters import HTTPAdapter
requests = requests.Session()
requests.mount('http://', HTTPAdapter(max_retries=3))
requests.mount('https://', HTTPAdapter(max_retries=3))
获取数据。
headers = {"User-Agent":"……"}
#第二页地址
url_next = "https://m.weibo.cn/api/container/getIndex?containerid=……featurecode=20000320&since_id="
for i in range(1,251): #微博粉丝页只公开显示了前250页
print(str(i))
if i == 1:#第一页地址
url = "https://m.weibo.cn/api/container/getIndex?containerid=231051_-_fans_-……&featurecode=20000320"
else:#第二页地址
url = url_next + str(i)
req = requests.get(url,headers=headers,verify=False)
text = json.loads(html,encoding="UTF-8")
cg = text['data']['cards']
if(len(cg) > 0):
cg = cg[0]['card_group']
#print(gender.encode('utf-8'))
total = text['data']['cardlistInfo']['total']
我特意测试了250页之后的内容,返回的json文件如下:
{"ok":0,"msg":"\u8fd9\u91cc\u8fd8\u6ca1\u6709\u5185\u5bb9","data":{"cards":[]}}
其中Unicode字符转码后为:
(转码地址:http://tool.chinaz.com/tools/unicode.aspx)
这里还没有内容
其实对于用户数据的保护,微博还是有采取措施的,至少粉丝列表不允许全部查阅。
图4 粉丝列表的权限
要测试250页之后的内容,就必须要设置条件,否则json解析会出错。将上面的字典部分改成下面形式。
if "cards" in text['data'].keys(): #250页后没有了cards键,所以要进行判断
cg = text['data']['cards']
else:
cg = ""
if(len(cg) > 0): #当cg大于0,证明有cards键,并且有列表数据
cg = cg[0]['card_group']
#print(gender.encode('utf-8'))
total = text['data']['cardlistInfo']['total']
结果分析
我们对粉丝分一下类,统计每一类的数量。
for each in cg:
user = user + 1
#---------------start-------------------
#粉丝数小于10的用户
if each['user']['followers_count']
followers_count10 = followers_count10 + 1
#关注数小于10的用户
if each['user']['follow_count']
follow_count10 = follow_count10 + 1
#均小于10的用户
if each['user']['follow_count']
both_count10 = both_count10 + 1
#-----------------end-------------------
#---------------start-------------------
#粉丝数小于20的用户
if each['user']['followers_count']
followers_count20 = followers_count20 + 1
#关注数小于20的用户
if each['user']['follow_count']
follow_count20 = follow_count20 + 1
#均小于20的用户
if each['user']['follow_count']
both_count20 = both_count20 + 1
#-----------------end-------------------
#---------------start-------------------
#粉丝数小于30的用户
if each['user']['followers_count']
followers_count30 = followers_count30 + 1
#关注数小于30的用户
if each['user']['follow_count']
follow_count30 = follow_count30 + 1
#均小于30的用户
if each['user']['follow_count']
both_count30 = both_count30 + 1
#-----------------end-------------------
#认证用户数
if each['user']['verified'] == True:
verify_user = verify_user + 1
if each['user']['followers_count']
verify30 = verify30 + 1
print(each['user']['screen_name'])
#普通有效用户数
if each['user']['followers_count'] > 30 and each['user']['verified'] == False:
valid_user = valid_user + 1
我们能看到的粉丝数量只有4875个,相比粉丝总数是非常少的了。
图5 粉丝情况
我们看到在前4875名粉丝里面:
粉丝数小于10的用户数量与关注数小于10的用户数量分别约占35%和8%
粉丝数小于20的用户数量与关注数小于20的用户数量分别约占43%和12%
粉丝数小于30的用户数量与关注数小于30的用户数量分别约占49%和17%
两者都小于的数量略低于各段关注数小于的用户数量
认证用户约占1%
有效用户约占49%
正常应该是user = 粉丝数小于30的用户数量 + 有效用户数量 + 认证用户数量,但实际不相等
粉丝数小于30的用户数量占了将近用户可见粉丝数的一半,说明了存在着很多僵尸粉,我们姑且把僵尸粉的标准放低点,以小于10为标准,但也占了三成。其实有时觉得微博不让看全部的粉丝数,是不是只是为了不让人知道里面到底有多少僵尸粉呢?!
不过我们不能忽略那些用小号追星的人,这部分人据我所知也是存在的,但僵尸粉的数量会远多于这部分人。
关于僵尸粉,我查了一下百度百科。
图6 百科资料1
图7 百科资料2
图8 百科资料3
1968年,美国科学史研究者罗伯特·莫顿(Robert K. Merton)提出马太效应以概括一种社会心理现象:“相对于那些不知名的研究者,声名显赫的科学家通常得到更多的声望;即使他们的成就是相似的,同样地,在一个项目上,声誉通常给予那些已经出名的研究者”。
图7提到衡量用户的影响力是由被评论数、被转发数和粉丝数组成的,但我认为应该是由被评论数和被转发数组成的,因为真正的粉丝是会关注你的微博,会发表意见的,而不仅仅是关注和赞。有些几千万粉丝甚至粉丝上亿的用户微博下面却没有多少评论,他们仅靠粉丝数来彰显自己其实正体现了他们的不自信和自欺欺人,以为自己的关注度高了就能出名了(马太效应)。虽然很多时候僵尸粉都是注册时系统自动分配的,但是买粉的情况也是存在的。
而我爬取的这位大V用户,微博底下评论数和转发数稳定在一万多,赞稳定在四五万左右,赞偶尔会有十几万(但“赞”我认为只能衡量微博内容的热度),所以2000多万粉丝里面的僵尸粉可想而知有多少了,而且分析的过程中粉丝数也不断增加了几十个。
如果说要整理注册时送粉丝和买粉的行为,那也不太可能,因为谁敢处理这条利益链呢?!
(………………)
琴子的喵窝∣分享文化,生活
领取专属 10元无门槛券
私享最新 技术干货