重磅内幕!2020年CSDN的博客之星的粉丝曝光了

159 阅读2分钟

一年一度的博客之星活动正开展的如火如荼,由于博主也有幸进入200名的候选,因此在各个群里也不时轰炸各位CSDN博友,被打扰的亲见谅了。周末活动就结束了,哈哈。
这次活动参与了多少人呢?大佬们的粉丝团到底是啥样的呢?现在让我们起底下各位大佬的粉丝们去。

拉票太难了!大家有余票的,支持下我啊支持点我投票

1、数据采集

经简单分析,CSDN官方并没有做任何限制,因此分析很简单,这里不再赘述。

我们直接访问
https://bss.csdn.net/m/topic/blog_star2020/getRanking 就可以获取每个爱豆的粉丝数。不过这个接口是个分页接口,不能够一把拉取所有的粉丝数,因为CSDN数据统计的原因,会非常慢,因此我们就按每页50条、100条的拉取即可。
写个并发拉取的c#程序,可以快速拉取并入库数据了。

 var stars = rss.AllStar(); 
  var list = new List<Task>();
  for (int i = 0; i < stars.Count; i++)
  {
      Console.WriteLine($"start {stars[i].Nick_Name}====================");
      list.Add( rss.GetAllFans(stars[i].UserName));     
  }
  Task.WaitAll(list.ToArray());

public async Task<List<Blogger>> GetAllFans(string username)
{
     var list = new  List<Blogger>();
     //设定每个人最多7000粉丝,这个有可能第一名会超,他粉丝太多太多了,哦哦哦
     for (int i = 1 ; i < 70; i++)
     {
         var rt = await GetFans(username,  i);
         if (rt == null) break;
         rt.ForEach(x => x.Star = username);
         list.AddRange(rt);

         Console.WriteLine($"acquire {username}'s fans {rt.Count}");                       
     }

    
     InsertData(list);
     Console.WriteLine($"End {username}====================");
     return list;
 }
public async Task<List<Blogger>> GetFans(string username,int page)
 {
      var client = HttpclientFactory.CreateClient("csdn");
      var req = new StringContent($"username={username}&page={page}&pageSize=100");           
      req.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");             
      var response = await client.PostAsync($"m/topic/blog_star2020/getRanking", req);
      var content = await response.Content.ReadAsStringAsync();
      var fanInfo = JsonConvert.DeserializeObject<RtnFanInfo>(content);
      if(fanInfo.Data != "[]")
      {
          var list = JsonConvert.DeserializeObject<List<Blogger>>(fanInfo.Data);
          return list;
      }
      else
      {
          return null;
      }            

  }

如果需要多ip访问,推荐使用家庭ip,可免费试用。

2、建表入库

利用mysql存储数据,这里需要注意的是,csdn的用户名是包含表情字符的,因此需要使用utf8mb4进行存储。

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for starfan2
-- ----------------------------
DROP TABLE IF EXISTS `starfan2`;
CREATE TABLE `starfan2`  (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `star` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `nick_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `level` int(255) NULL DEFAULT NULL,
  `codelevel` int(255) NULL DEFAULT NULL,
  `votenum` int(11) NULL DEFAULT NULL,
  `starname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 55321 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

3、活动参与人数

截止到01月20日的11点,统计参与的粉丝人数合计:26094。2万6千人的狂欢啊,粉丝的热情还是很高的。

# 统计去重的粉丝总量
select  count(distinct username) from starfan2;

4、拥有很多票的粉丝

哈哈,这里曝光下拥有很多票的粉丝,候选人们赶快动手去挖墙角去啊。

select nick_name,CONCAT('https://blog.csdn.net/',max(username)) username, max(votenum) as vts from starfan2  group by nick_name  order by vts desc limit 20;
金主爸爸博客已投票
谷哥的小弟blog.csdn.net/lfdfhl130
一叶飘舟blog.csdn.net/jdsjlzx130
beyondmablog.csdn.net/BEYONDMA126
herosunlyblog.csdn.net/herosunly120
文宇肃然blog.csdn.net/wenyusuran120
谙忆blog.csdn.net/qq_26525215119
vv_小虫blog.csdn.net/vv_bug118
ConstXiongblog.csdn.net/meism5117
铁锚blog.csdn.net/renfufei117
AI之禅blog.csdn.net/weixin_3239…110
_陈哈哈blog.csdn.net/qq_39390545110
白水baishuiblog.csdn.net/baishuiniya…110
carl-zhaoblog.csdn.net/u012410733108
AlbertSblog.csdn.net/shihengzhen…108
Sahadev_blog.csdn.net/u011064099108
671coderblog.csdn.net/liuqiyao_01108
恬静的小魔龙blog.csdn.net/q764424567108
小山猪的沙塔blog.csdn.net/u012039040108
简简单单OnlineZuozuoblog.csdn.net/qq_15071263108
Trent1985blog.csdn.net/Trent1985106

5、排名前十的博主号召投票的粉丝数

多年前使用过R,都忘光了,简单绘制下。这里仅仅是参与投票的粉丝数,没有参见投票的粉丝,可能过万,并且也可能不仅仅在CSDN。
在这里插入图片描述

# 利用R绘制图形
library(RMySQL)
con <- dbConnect(MySQL(), host="192.168.1.6", dbname="test", user="root", password="lyxa123456")
# 先解决花名的编码问题
dbSendQuery(con, "SET NAMES utf8mb4")
star <- dbGetQuery(con,"select max(starname) name,sum(votenum) vts,count(*) fans from starfan2 group by star order by vts desc limit 20")
# 重新解码花名
Encoding(star$name) <-"UTF-8"
star$name <- as.factor(star$name);
plot(star$name,star$fans)

6、前20名博主的粉丝投票平均数

select max(starname) name,sum(votenum) vts,count(*) fans, sum(votenum)/count(*) avegVotes from starfan2 group by star order by vts desc limit 20

经过查询,可知道各个大佬的粉丝死忠程度。

排名博主票数粉丝数平均投票
1敖 丙895432122.7877
2Hollis在csdn521514453.6090
3谷哥的小弟49506667.4324
4帅地463219012.4366
5小傅哥41276826.0513
6一个处女座的程序猿401212333.2539
7小林coding39517615.1919
8沉默王二394512993.0370
91_bit39216675.8786
10第三女神程忆难33228094.1063
11qq264800872630623598.5292
12中间件兴趣圈28163597.8440
13张志翔27766024.6113
14李锐博恩27125045.3810
15谙忆26329502.7705
16Jack-Cui25036204.0371
17TrueDei24896713.7094
18程序猿小亮242123510.3021
19lovelife110233322110.5566
20LaoYuanPython22775743.9669

按照总票数 124897计算,每个人平均投票数为 4.8票。

7、小结

经此一役,博主发现了自己短板,即使数据在手,也无法分析挖掘出更多信息,博主的大数据分析能力太差了额。需要向大佬们学习数据挖掘的知识了。