查看原文
其他

Python 分析程序员最关心的竟不是技术,而是…

罗昭成 程序人生 2019-02-15

今天是2019年元旦,CSDN小姐姐们,祝大家新年快乐!

在过去的一年里,CSDN程序人生的职场、生活、行业热点、技术干货等几类文章,引起了很多开发者的共鸣。

这一年,程序人生收到了很多鼓励和认可的留言,也收到了很多建议和批评。新的一年,CSDN程序人生,愿和你一道,共同打造业内程序员第一内容阵地。

所以,今天的这篇文章,是特意写给你的。CSDN程序人生特约作者罗昭成,用Python爬取了程序人生一整年的文章,用数据来告诉你,这一年哪些文章最受欢迎,哪些文章曾激起了大家的思维涟漪,以及哪些词语,是今年文章中的高频词......

以下为正文:

从工业时代进入到信息服务时代,互联网行业逐渐兴起,传统行业逐渐没落。现如今,很多人混迹于互联网+的时代,人人都要学习编程已经逐渐被重视起来。

作为一个入行五年的老鸟,回首看看这五年的经历,恍若隔世。

从PC互联网时代到移动互联网时代的转变,也就是前几年的事情。IT界的快节奏已经成为常态。小步快跑 ,产品的快速的迭代,移动互联网有了飞速的发展。

现在,更加快捷方便的生活体验,都是由一群怀揣着“改变世界”的梦想的人,一群不辞辛劳的程序员实现的。

“程序员”在大众心里,有很多刻板印象的标签:死宅 、呆板、加班、智商很高情商却很感人,极客、一年四季的格子衫等,更有那句著名的“钱多话少死得早”。

这些刻板印象,对也不全对,它们只是程序员众多特性中的一个方面。

这样的一群人,他们对电脑的性能要求极高,对机械键盘非常热衷,对耳机追求到极致,除了我们常见的一些,他们还关心、喜欢的还有啥。

笔者将从CSDN程序人生 近几年的发文数据中,从数据的角度,来分析一下这群极客的人,脑子里面装的究竟都有些什么。


数据获取


本次数据来源为CSDN程序人生公众号发文,第一步需要从获取公众号近几年的发文数据。公众号内容因发布在微信官方平台,所以只能通过微信,才能获取到对应的数据。

抓包

抓包是将网络传输发送与接收的数据包进行截获、重发、编辑等操作。在这里,我们需要使用我们自己的个人电脑,安装相应的抓包工具进行抓包(Mac推荐使用Charles,Windows推荐使用Fiddler)。

• HTTPS

HTTPS是安全为目标的HTTP通道,HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS的出现增加了抓包的难度,但并不是不可解的。

为了解决这个问题,抓包工具会作为一个中间代理人,手机端与抓包工具进行通信,抓包工具在与服务端进行通信。

手机端与抓包工具建立HTTPS请求使用的公钥是抓包工具下发给他的。所以,为了能正常通信,需要安装抓包工具生成的根证书并信任该证书。

从抓取到的数据包中,可以分析出公众号文章列表对应的请求接口,只需要分页发送所有数据请求,就可以拿到整个文章列表。

但点赞(好看)数与阅读数量就比较难获取。这两项数据只在微信客户端上有,经过分析(猜测),此请求是微信客户端触发并更新到页面中的,要获取到此数据,只能使用笨办法,让微信打开文章详情页面,发送请求,我们将请求返回的数据存储起来,在与文章标题进行关联,数据就可以使用了。

自动化才能解放双手,所以此处使用AnyProxy+ADB Shell 。

AnyProxy是一个基于Node.js的、可供插件配置的HTTP/HTTPS代理服务器。和上面提到的Charles 、 Fiddler类似,但更加适合开发者使用。

ADB是Android开发SDK中的一个工具,它可以使用屏幕点击、输入、滑动等功能,由此实现自动化点击屏幕。

启动AnyProxy,设置指定插件JS的路径,并运行ADB脚本,自动化打开页面,使得插件能够自动地将微信发送的请求中的Request与Response数据存储在数据库文件中,插件核心代码如下:

var url = require("url")
module.exports = {
   *beforeSendResponse(requestDetail, responseDetail)
  {
       try {
           var pathName = url.parse(requestDetail.url).pathname
           if(pathName == "/mp/getappmsgext") {
               saveReadCount(requestDetail, responseDetail)
          }
      } catch(err) {
           console.log("err")
      }
  }
};


数据清洗与分析


经过一段时间的数据抓取,并且对数据进行了关联,本地一共获取到的数据有2630条,与动辄成千上万的电影评论数据相比,虽然量不是很多,但也足够我们从中分析出一些关键信息。

点赞是对网络上的某个内容(比如一条贴子、一篇文章或者一条微博等)表示赞同、喜爱。所以我们先来看一下程序人生公众号推文的点赞TOP10:

因为数据是存储在数据库中,所以只需要使用简单的SQL查询就可以拿到我们想要的数据,SQL代码如下:

select title as标题、author as作者、CAST(likeCount as int) as点赞数。from messages order by点赞数DESC limit 10。

执行上述SQL,拿到的结果如下:

从上图可以看到,“长春长生‘’最受关注,点赞数量远高于其它文章,可以看出我们程序员小哥哥们,也是时实关注社会重大事件,忧国忧民。

当然,点赞只是其中的一个指标,不能表示全部。毕竟有好多程序员连赞都懒得点。

除了点赞数量,我们来看看阅读数量的排行,此处使用的是控制台打印输出的数据,为了更好地格式化结构,使用了PrettyTable, 代码如下:

def getArticInfos(min, max):
   conn = sqlite3.connect('wechat.db')
   conn.text_factory = str
   cursor = conn.cursor()
   cursor.execute("select title, author, datetime, CAST(readCount as intas readCAST(likeCount as intas like from messages where datetime > '2018-01-01 00:00:00' order by read desc")
   values = cursor.fetchall()
   table = PrettyTable(["
Title", "Author", "Time", "Read Count", "Like Count"])
   table.align["
Title"] = "l
   table.align["
Author"] = "l
   table.padding_width = 1
   totalCount = 0
   for item in values:
       readCount = item[3]
       if  readCount >= min and readCount < max:
           table.add_row([str(item[0]), str(item[1]), str(item[2]), str(item[3]), str(item[4])])
           totalCount += 1
   print table
   print "
Total Count:" + str(totalCount)
   conn.close()

此处列出了从7W+到10W+的文章列表:

从图中我们可以看到,张小龙微信第一版需求启发地的龙泉寺备受关注,程序员的负面新闻也是众多程序员关注的焦点。行业新闻及与他们相关的事情,更能够吸引他们的注意。

最后,我们再整体地来看一下,这些文章中,标题里面都会出现哪些高频的词语。特此,使用Jieba分词来进行分词,并使用Matplotlib生成词云图,如下:

从图中,我们可以看到,“学习”可以说是相当高频的一个词语,当然,在各行各业,学习都是一个很重要的话题以及技能。

尤其是在 IT 行业,更新迭代更是异常迅捷,甚至快到前两天刚学的知识,过两天就过时了。

所以,众多的程序员都很关注自己的个人成长,学习自然必不可少。架构、框架、指南是一个吸引程序员比较好的词语。

最后最后,我想说的是,很想不通,作为一个程序员,你没有女朋友,你new一个对象不就完了吗?居然还要去相亲?

最最后,福利来啦!


好酒留在末后


为了感谢广大陪伴CSDN程序人生一起前行的读者朋友们。本次CSDN程序人生联合博文视点,为大家送出5类总计10本的高评分科技图书。

在本文评论区留言点赞最高的前十名,即可获得一本科技图书(随机发货哦),开奖时间为1月2日下午17:00整,喜欢就赶快留言吧!

《疯狂Python》


从零开始,Python编程从入门到实践一网打尽。网络爬虫、大数据分析与展现、并发编程等一个不漏。

《Redis 深度历险:核心原理与应用实践》


本书作者老钱在使用 Redis 上积累了丰富的实战经验,可以帮助更多后端开发者更快、更深入地掌握 Redis 技能,还能帮助读者更轻松地通过技术面试,进入心仪企业。

《Netty进阶之路:跟着案例学Netty》


Netty将Java NIO接口封装,提供了全异步编程方式,是各大Java项目的网络应用开发必备神器。本书作者是国内Netty技术的先行者和布道者,本书是他继《Netty木又威指南》之后的又一力作。

《你也能看得懂的Python算法书》


本书面向算法初学者,首先介绍当下流行的编程语言Python,详细讲解Python语言中的变量和循序、分支、循环三大结构,以及列表和函数的使用,为之后学习算法打好基础。然后以通俗易懂的语言讲解双指针、哈希、深度优先、广度优先、回溯、贪心、动态规划和至短路径等经典算法。

《智能问答与深度学习》


本书由浅入深地介绍了人工智能在文本任务中的应用。不但介绍了自然语言处理、深度学习和机器阅读理解等基础知识,还简述了信息论、人工智能等的发展过程。


 热 文 推 荐 

为什么 ofo 彻底凉了?

华为狼性文化遭质疑,那我们当个佛系程序员可好?

突发!12306 脱库 410 万用户数据究竟从何泄漏?

恒大贾跃亭和解;快播处罚细节曝光;天津三星工厂关闭 | 极客头条

等了20年的物联网,这次真的会成功吗?

实现通用人工智能还要多久?Hinton与AlphaGo之父这样回答

老程序员肺腑忠告:千万别一辈子靠技术生存!

2019年区块链最大悬念:谁将捡起以太坊掉落的王冠

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!";

点击“阅读原文”,打开 CSDN App 阅读更贴心!


喜欢就点击“好看”吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存