本文首發於 CSDN 程序人生(ID:coder_life)
從工業時代進入到信息服務時代,互聯網行業逐漸興起,傳統行業逐漸沒落。現如今,很多人混跡於互聯網+的時代,人人都要學習編程已經逐漸被重視起來。
作爲一個入行五年的老鳥,回首看看這五年的經歷,恍若隔世。
從PC互聯網時代到移動互聯網時代的轉變,也就是前幾年的事情。IT界的快節奏已經成爲常態。小步快跑 ,產品的快速的迭代,移動互聯網有了飛速的發展。
現在,更加快捷方便的生活體驗,都是由一羣懷揣着“改變世界”的夢想的人,一羣不辭辛勞的程序員實現的。
“程序員”在大衆心裏,有很多刻板印象的標籤:死宅 、呆板、加班、智商很高情商卻很感人,極客、一年四季的格子衫等,更有那句著名的“錢多話少死得早”。
這些刻板印象,對也不全對,它們只是程序員衆多特性中的一個方面。
這樣的一羣人,他們對電腦的性能要求極高,對機械鍵盤非常熱衷,對耳機追求到極致,除了我們常見的一些,他們還關心、喜歡的還有啥。
筆者將從CSDN程序人生 近幾年的發文數據中,從數據的角度,來分析一下這羣極客的人,腦子裏面裝的究竟都有些什麼。
1. 數據獲取
本次數據來源爲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")
}
}
};
2. 數據清洗與分析
經過一段時間的數據抓取,並且對數據進行了關聯,本地一共獲取到的數據有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 int) as read, CAST(likeCount as int) as 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一個對象不就完了嗎?居然還要去相親?