用 Python 分析 CSDN 小姐姐一年都做了啥

转载 2017年12月31日 00:00:00

点击上方“CSDN”,选择“置顶公众号”

关键时刻,第一时间送达!

【CSDN 编者按】今天是 2017 年最后一天,在此向所有程序员朋友们道一声「新年快乐」,在过去一年里,发生了很多事,一边是新技术的不断迭代,一边是国内外各大厂的放大招,还有的,就是程序员群体所遭遇的重大事件。在这一年,CSDN 发布了 905 篇文章,与所有程序员朋友们一起见证了许多事,也相伴着走过了学习、工作的路程,在本文中,我们的一位好朋友 —— 某知名互联网公司运维技术负责人刘晓明(ID:布道)用 Python 爬虫了 CSDN 过去一年的历史文章数据并进行了分析与总结,在此与诸君分享。

0?wx_fmt=jpeg

CSDN 小姐姐祝所有程序员朋友新年快乐!

以下为正文:

2017 年转眼之间就过完,心挺累,人挺烦,想想都是为了钱。今天,我们用 Python 看看 2017 年小姐姐对 CSDN 微信公众号都做了啥?微信公众号的文章爬取有三种方式:

1. 通过微信订阅号在发布文章,可以查找公众号的文章,方式见微信公众平台的链接。但阅读数、点赞数、评论数仍无法抓取。

2. 通过搜狗微信搜索微信公众号方式,但是文章篇幅仍然后有限制,点赞、阅读数和评论数无法抓取。

3. 通过“中间人方式”对数据进行拦截,过滤解析后进行抓取。

本文就是利用第三种方式对数据进行抓取。

思路

1. 安装代理 AnProxy,在手机端安装 CA 证书,启动代理,设置手机代理;

2. 获取目标微信公众号的 __biz;

3. 进入微信公众号的历史页面;

4. 使用 Monkeyrunner 控制滑屏;获取更多的历史消息;

5. 记录文章标题、摘要、创建时间、创作类型、地址等等;

6. 文章列表获取完成后,利用 Monkeyrunner 进入文章的列表,

7. 记录文章的阅读数,点赞数,评论数等;

8. 重复以上操作。

数据爬取结果


0?wx_fmt=png

数据分析

文章总数:905 篇,每个月发布情况如下:

import pandas as pd
import matplotlib.pyplot as plt
name=['日期','时间','标题','作者','摘要','创作类型','是否头条号','阅读数','点赞数','评论数','地址']df = pd.read_excel('weixin.xlsx',encoding= 'utf-8',header=1,names=name,)
df = pd.read_excel('weixin.xlsx',encoding= 'utf-8',header=1,names=name,)
df['文章数'] = pd.to_datetime(df['日期']).dt.month
date = pd.DataFrame(df['文章数'].value_counts())
plt.figure(figsize=(15, 5))
plt.title('CSDN公众号文章发布情况')
plt.xlabel('月份')
plt.ylabel('文章数')
plt.xticks((1,2,3,4,5,6,7,8,9,10,11,12),('2017-01','2017-02','2017-03','2017-04','2017-05','2017-06','2017-07','2017-08','2017-09','2017-10','2017-11','2017-12'))
plt.plot(date.sort_index(),color='green',linestyle='dashed', marker='o', markerfacecolor='blue', markersize=8,)
plt.show()

0?wx_fmt=png

CSDN 公众号发布情况

通过发布文章次数的曲线来看,CSDN 在今年下半年才正式着重运营微信公众号,在 11 月份和 12 月份月发布次数已经超过 100 篇,每天 6 篇文章已经成为常态,小姐姐确实不容易啊,手动点赞!

创作类型分析

import pandas as pd
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.pyplot as plt
name=['日期','时间','标题','作者','摘要','创作类型','是否头条号','阅读数','点赞数','评论数','地址']
df = pd.read_excel('weixin.xlsx',encoding= 'utf-8',header=1,names=name,)
data = pd.DataFrame(df['创作类型'].value_counts())
explode=[0,0,0,0,0]
plt.figure(figsize=(15, 6))
plt.axes(aspect=1)
plt.title('文章创作情况',fontsize=18)
plt.pie(x=data,autopct='%.2f%%',explode=explode,shadow=True,labels=['原创','未标记作者','创作或转发','其它','未知'])
plt.show()

0?wx_fmt=jpeg

文章创作情况比例分布

通过文章的创作情况来看,一半以上的文章都是原创。基本上每天至少有一篇原创的文章。

有这样的文采,确实是难得的人才。

阅读数分析

import pandas as pd
import matplotlib.pyplot as plt
name=['日期','时间','标题','作者','摘要','创作类型','是否头条号','阅读数','点赞数','评论数','地址']
df = pd.read_excel('weixin.xlsx',encoding= 'utf-8',header=1,names=name,)
data = df[['阅读数']]
a = data.sort_values(by=['阅读数'],ascending=False)
one = a[a['阅读数']>=70000].size
two = a[(a['阅读数']>=30000) & (a['阅读数']<70000)].size
three = a[(a['阅读数']>=10000) & (a['阅读数']<30000)].size
four = a[(a['阅读数']>=1000) & (a['阅读数']<10000)].size
five = a[(a['阅读数']<1000)].size
explode=[0.3,0,0,0,0]
fras = [one,two,three,four,five]
plt.figure(figsize=(15, 5))
plt.axes(aspect=1)
plt.title('阅读数分布比例',fontsize=18)
plt.pie(x=fras,autopct='%.2f%%',explode=explode,shadow=True,labels=['大于70,000','30,000~70,000','10,000~30,000','1000~10,000','小于1,000'])
plt.show()

0?wx_fmt=jpeg

阅读数分布比例

import pandas as pd
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.pyplot as plt
name=['日期','时间','标题','作者','摘要','创作类型','是否头条号','阅读数','点赞数','评论数','地址']
df = pd.read_excel('weixin.xlsx',encoding= 'utf-8',header=1,names=name,)
df_read = df[['标题','阅读数']]
data_read = df.sort_values(by=['阅读数'],ascending=False)
data_read.index = data_read['标题']
var = data_read['阅读数'][:10]
plt.figure(figsize=(15, 6))
plt.title('阅读数 TOP10 的文章',fontsize=18)
plt.xlabel('数量',fontsize=18)
plt.ylabel('标题',fontsize=18)
var.plot(kind='barh', stacked=True,alpha=0.5,color=['red'])
plt.show()

0?wx_fmt=jpeg

阅读数 TOP10 的文章

由于阅读数超过 10W,返回值为 100001,具体数字是多少,前后台不得而知。整体文章质量比较高,不乏有 10 万+的文章出现。大 V,对技术资讯的传播具有很大的影响力!

点赞数分析

import pandas as pd
import matplotlib.pyplot as plt
name=['日期','时间','标题','作者','摘要','创作类型','是否头条号','阅读数','点赞数','评论数','地址']
df = pd.read_excel('weixin.xlsx',encoding= 'utf-8',header=1,names=name,)
data = df[['点赞数']]
a = data.sort_values(by=['点赞数'],ascending=False)
one = a[a['点赞数']>=200].size
two = a[(a['点赞数']>=50) & (a['点赞数']<200)].size
three = a[(a['点赞数']<50)].size
explode=[0.3,0,0]
fras = [one,two,three]
plt.figure(figsize=(15, 5))
plt.axes(aspect=1)
plt.title('点赞数分布比例',fontsize=18)
plt.pie(x=fras,autopct='%.2f%%',explode=explode,shadow=True,labels=['大于200','50~100','小于50'])
plt.show()

0?wx_fmt=jpeg

点赞数分布比例

import pandas as pd
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.pyplot as plt
name=['日期','时间','标题','作者','摘要','创作类型','是否头条号','阅读数','点赞数','评论数','地址']
df = pd.read_excel('weixin.xlsx',encoding= 'utf-8',header=1,names=name,)
df = df[['标题','点赞数']]
data = df.sort_values(by=['点赞数'],ascending=False)
data.index = data['标题']
var = data['点赞数'][:10]
plt.figure(figsize=(15, 6))
plt.title('点赞数 TOP10 的文章',fontsize=18)
plt.xlabel('数量',fontsize=18)
plt.ylabel('标题',fontsize=18)
var.plot(kind='barh', stacked=True,alpha=0.7,color=['green'])
plt.show()

0?wx_fmt=jpeg

点赞数 TOP10 的文章

中兴跳楼程序员妻子:他们就这样把我老公逼死了”文章点赞数 1542,“我们愤恨于现实,在互联网内外,公司调整牺牲员工利益的不公平不道德之事时有发生,尤其是在互联网公司,裁员更是屡见不鲜,尤以“为什么总说程序员是吃青春饭的?”为重。而到了个人身上,随着年岁增长,学习、精神等的下降,上有老下有小,面对突然的被辞退,压力可想而知,但是当事情发生之时,我们还是要尽可能地调整心态,网上评论的很多,这种基层主管处于不上不下的尴尬处境,只能考虑降低心理预期,哪怕是从头再来呢。生活固然残酷,但也不要轻易放弃,毕竟还有自己爱和爱自己的人啊!”,大家对此特别赞同!

评论数分析

import pandas as pd
import matplotlib.pyplot as plt
name=['日期','时间','标题','作者','摘要','创作类型','是否头条号','阅读数','点赞数','评论数','地址']
df = pd.read_excel('weixin.xlsx',encoding= 'utf-8',header=1,names=name,)
data = df[['评论数']]
a = data.sort_values(by=['评论数'],ascending=False)
one = a[a['评论数']>=50].size
two = a[(a['评论数']>=20) & (a['评论数']<50)].size
three = a[(a['评论数']<20)].size
explode=[0.3,0,0]
fras = [one,two,three]
plt.figure(figsize=(15, 5))
plt.axes(aspect=1)
plt.title('评论数分布比例',fontsize=18)
plt.pie(x=fras,autopct='%.2f%%',explode=explode,shadow=True,labels=['大于50','20~50','小于20'])
plt.show()

0?wx_fmt=jpeg

评论数分布比例

import pandas as pd
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.pyplot as plt
name=['日期','时间','标题','作者','摘要','创作类型','是否头条号','阅读数','点赞数','评论数','地址']
df = pd.read_excel('weixin.xlsx',encoding= 'utf-8',header=1,names=name,)
df = df[['标题','评论数']]
data = df.sort_values(by=['评论数'],ascending=False)
data.index = data['标题']
var = data['评论数'][:10]
plt.figure(figsize=(15, 5))
plt.title('评论数 TOP10 的文章',fontsize=18)
plt.xlabel('数量',fontsize=18)
plt.ylabel('标题',fontsize=18)
var.plot(kind='barh', stacked=True,alpha=0.7,color=['blue'])
plt.show()

0?wx_fmt=jpeg

评论数 TOP10 的文章

“程序猿的一天就是这么糟心!留言有机会获《程序员》一年”抢福利,“程序员有什么错?凭什么杀我祭天”、“程序员的反思:不要一辈子靠技术生存”有争议的话题纷纷发表自己的看法。

2017 年最受欢迎的 10 篇文章

NO1:中兴跳楼程序员妻子:他们就这样把我老公逼死了

摘要:愿逝者安息,生者坚强。

作者:苏宓&沭七

阅读数:100001

点赞数:154

评论数:99

NO2:程序员有什么错?凭什么杀我祭天

摘要:近几年各大 App 的“更新日志”们挣脱了传统的枷锁,开始彻底放飞了自我!而提起“更新日志”界的网红人物,第一位莫过于混迹各大公司的 Peter 先生!

作者:屠敏

阅读数:100001

点赞数:727

评论数:100

NO3:重大改革:Python 语言将被加入高考科目,VB 惨被淘汰!

摘要:近期,浙江省信息技术课程改革方案出台,Python 确定进入浙江省信息技术高考,从 2018 年起浙江省信息技术教材编程语言将会从 VB 更换为 Python。

作者:无

阅读数:100001

点赞数:207

评论数:79

NO4:今天,美团程序员的年终奖金可能没了

摘要:转眼间,一年时间余额已不足十二分之一,想想至少为了年终奖,此时也要撸起袖子加油干。然而,今天出现的一个大规模 Bug,很可能直接导致美团的程序员们错失了丰厚年终奖的机会。

作者:苏宓

阅读数:100001

点赞数:111

评论数:44

NO5: Wi-Fi 爆重大安全漏洞,Android、iOS、Windows 等所有无线设备都不安全了

摘要:无论你在家还是在公众场合,无论你是 Android 还是 iPhone 手机,只要连接了 Wi-Fi ,都不再安全。

作者:苏宓

阅读数:81282

点赞数:98

评论数:38

NO6:15 个句号导致微信 ANR,你中招了吗?附原理解析与解决方案

摘要:15。。。。。。。。。。。。。。。导致安卓手机微信卡死,你中招了么?

作者:屠敏

阅读数:80123

点赞数:144

评论数:98

NO7: 为什么现在的监控系统容易硬盘坏?附原理解析

摘要:分享一则技术贴。

作者:无

阅读数:70302

点赞数:157

评论数:41

NO8:致永远离开我们的一位程序员

摘要:为什么在代码之外的世界里,作为程序员的我们,会频遭维艰的窘境?致这位永远离开我们的开发者,愿天堂没有恶人相逼,愿你可做自己喜欢的事情。

作者:班布里

阅读数:67689

点赞数:108

评论数:92

NO9:任正非致歉华为前程序员:回来吧,公司错了

摘要:当年岁增长,究竟是在技术一线的道路上一直走下去?还是转而做管理人员?又该如何兼顾工作与家庭?

作者:唐小引

阅读数:65206

点赞数:199

评论数:94

NO10:马云说,即使阿里巴巴死了,达摩院也要活着

摘要:用马云的原话就是:阿里巴巴要走 102 年非常之艰难,达摩院必须要比阿里巴巴活的时间长。

作者:沭七

阅读数:59097

点赞数:191

评论数:74

虽然不知道在 2017 年增加多少粉,但是通过分析来看,CSDN 公众号通过一年的运营已经成为技术类公众号的主流媒体。若我是老板,年终奖一定会给她包个大红包,2018 年升职加薪!

最后,朋友们如果有想说的话,或者想要源码或数据源学习,请留言,技术之路,感谢有你们[手动比心]。更欢迎你们加入 CSDN 作者大家庭,一起为天下程序员传播更具价值的优质内容,请微信联系:donyintxy 投稿(备注:姓名+投稿)。

作者简介:刘晓明,某知名互联网公司运维技术负责人,拥有 10 年的互联网开发和运维经验。一直致力于运维工具的开发和运维专家服务的推进,赋能开发,提高效能。有专栏名曰「开发运维」,欢迎关注:https://zhuanlan.zhihu.com/idevops。

————— 推荐阅读 —————

0?wx_fmt=jpeg

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=jpeg0?wx_fmt=gif

抓取CSDN博客文章的简单爬虫python源码

  • 2016年06月25日 00:07
  • 4KB
  • 下载

Python登录并获取CSDN博客所有文章列表

分析登录过程这几天研究百度登录和贴吧签到,这百度果然是互联网巨头,一个登录过程都弄得复杂无比,简直有毒。我研究了好几天仍然没搞明白。所以还是先挑一个软柿子捏捏,就选择CSDN了。过程很简单,我也不截图...
  • u011054333
  • u011054333
  • 2017-04-08 18:13:44
  • 408

小学生都在学Python

九个月前,由浙江政府主导浙江省新高中信息技术教材改革项目纷纷得到界内的点赞,新的改革方案将使用 Python 做核心编程语言,并主要教授高中在校生在数据分析类的应用。1、取消 Photoshop,取消...
  • Ly4wU5giY
  • Ly4wU5giY
  • 2017-12-10 00:00:00
  • 3935

python小博客项目

  • 2017年07月18日 22:17
  • 2.73MB
  • 下载

Python菜鸟教程-笔记

# -*- coding: UTF-8 -*- Python 数字 Python 数字数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间...
  • u014744118
  • u014744118
  • 2016-01-11 19:22:12
  • 5977

10个值得我们关注的python博客

大家好,还记得我当时学习python的时候,我一直努力地寻找关于python的博客,但我发现它们的数量很少。这也是我建立这个博客的原因,向大家分享我自己学到的新知识。今天我向大家推荐10个值得我们关注...
  • werm520
  • werm520
  • 2015-08-01 20:34:00
  • 3165

python实现一个完整的blog网站

简介学习廖雪峰python教程实战部分过程中编写的一个博客网站,包含日志、用户和评论3大部分,自己实现简易的ORM框架和Web框架,站点在这里,源码在github上。我将不断完善项目,如果你喜欢,点击...
  • tzshlyt
  • tzshlyt
  • 2016-12-11 23:38:10
  • 6770

浅谈python中的“ ==” 与“ is”

在python中,== 与 is 之间既有区别,又有联系,本文将通过实际代码的演示,力争能够帮助读到这篇文章的朋友以最短的时间理清二者的关系,并深刻理解它们在内存中的实现机制。 扯淡的话不多说,下面...
  • kobebryantlin0
  • kobebryantlin0
  • 2017-06-17 22:51:49
  • 3587

Python爬虫自动获取CSDN博客收藏文章

CSDN的Python创意编程活动开始第一天就看到了,但是认为自己是菜鸟,就向当“吃瓜群众”,后来看到有好多人的代码是关于爬虫的,当初我就是由于对爬虫 感兴趣才自学的Python。现在也打算参加一下这...
  • hurmishine
  • hurmishine
  • 2017-05-12 11:09:10
  • 3994

Python Flask开源博客系统Blog_mini

本博文在51CTO技术博客首发。        开源不易,Python良心之作,真心送给广大朋友,恳请给予支持,不胜感激!                大家可以从下面的地址中去体验Blog_mini...
  • xpleaf
  • xpleaf
  • 2016-03-13 11:46:13
  • 12275
收藏助手
不良信息举报
您举报文章:用 Python 分析 CSDN 小姐姐一年都做了啥
举报原因:
原因补充:

(最多只允许输入30个字)