為什么手動分析
Anthony說網(wǎng)站訪問分析是門學問,相當復雜。我查了下,貌似大公司確實是有負責SEO和相關(guān)運維的人嫉鲸。
事實上撑蒜,目前有很多成熟的統(tǒng)計工具:如 Google Analytics歹啼、百度統(tǒng)計、CNZZ座菠、淘寶的量子統(tǒng)計等等狸眼。
如何使用統(tǒng)計工具,根據(jù)它們提供的海量數(shù)據(jù)分析來進行分析浴滴,是需要長期摸索的拓萌。這次我只是想試試直接用Python分析SAE訪問日志access_log,看看4月5號的巨大流量到底是因為有學生無聊寫了爬蟲還是確實用戶黏性很大升略。
手動分析的思路
我注意到access_log的格式是相當工整的微王,每條訪問記錄為一行屡限。我個人認為每條記錄可分解為以下數(shù)據(jù):
主域名
,我們的網(wǎng)站域名
用戶IP地址
炕倘,包括 ip和 xxx
時間戳
钧大,時區(qū)
代碼版本
請求method
,如GET/POST/PUT
訪問路徑
罩旋, 如 /online
http協(xié)議
啊央、狀態(tài)碼
、傳輸內(nèi)容大小
涨醋。類似: HTTP/1.0 200 3751
訪客來源
瓜饥,refer
瀏覽器類型
,agent浴骂。這個是分析的重點乓土,估計要認真倒騰正則表達式
服務(wù)器名稱
(?),應該是sae的服務(wù)器代碼
這樣靠闭,便可以將log格式化保存并分析帐我。
最佳思路:
1.開個cron任務(wù)每天自動下載日志
2.將日志格式化處理,保存數(shù)據(jù)庫
3.對數(shù)據(jù)表進行分析
但是上述方法耗時巨大愧膀,花這精力不如折騰Google Analytics拦键!
簡化版思路:
1.手動下載感興趣的日志
2.Python腳本處理日志,轉(zhuǎn)成列表&字典
綜合體
3.需要分析什么東西檩淋,就寫相應的函數(shù)進行處理
實際操作
通過換行符
和空格
來辨識數(shù)據(jù)芬为,我將log保存為IP、timestamp蟀悦、method媚朦、route、agent等列表日戈。
1.判斷是否有爬蟲
專業(yè)一點的爬蟲會不斷更換IP地址询张,不過我覺得這么專業(yè)的黑客才懶得爬我們的網(wǎng)站呢!
所以浙炼,我直接去統(tǒng)計各IP的訪問次數(shù)份氧,不就可以判斷了嘛~
相關(guān)代碼如下:
from collections import Counter
c = Counter(IP)
print c.most_common(20)
第一次接觸collections
模塊,官方文檔見此弯屈,關(guān)于Counter
的簡單介紹見此蜗帜。
如果不用上述方法,直接去統(tǒng)計列表中各元素出現(xiàn)次數(shù)并排序资厉,可是個不小的問題厅缺。參見啄木鳥社區(qū)的討論和這篇還有這篇。
2.統(tǒng)計iPhone/iPad和Android用戶分布
對了,不能忘了WP湘捎。我們不是支付婊诀豁!
一步步清洗數(shù)據(jù)時發(fā)現(xiàn),【瀏覽器欺騙】真的是太常見了窥妇!下面是一個WP的ua且叁,真是可憐!
"Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Nokia 925) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537 MicroMes
senger/6.0"
所以秩伞,想要篩選真實設(shè)備信息逞带,是需要大量 for-if-print嘗試的,不斷的邏輯推理和排查纱新,才能得出具有一定可信度的結(jié)論展氓。
初步結(jié)論如下:
1.總pv為102306條
2.從微信中訪問的有93119條(MicroMessenger/
)
3.iPad訪問條數(shù)是2829
4.iPhone是26889(包含iPhone,不包含WP)
5.Android設(shè)備訪問次數(shù)是70752(包含Android脸爱,不包含WP遇汞。不知道還要排除誰)
6.從windows phone 訪問的有598條(Windows Phone
)
7.從uc瀏覽器訪問的只有23條,是一個Nokia用戶
如果標記了該設(shè)備簿废,然后再統(tǒng)計去重IP地址空入,差不多就是設(shè)備數(shù)。(不考慮更換IP地址)
待續(xù)族檬。歪赢。。
有沒有人看呀5チ稀B窨!扫尖!
3.統(tǒng)計網(wǎng)絡(luò)狀態(tài)分布
2G/3G/4G/WIFI白对。因為不同網(wǎng)絡(luò)的標識亦不同,所以搞定到底是3G還是2G都是一門學問换怖。
1.包含NetType標識的請求有91497次(估計是微信6.x才加入的特性)
2.WIFI環(huán)境的請求有63591次
3."cmnet"請求8952次 //中國移動2G甩恼?
4."3G"請求8450次
5."3gnet"請求5042次 //中國聯(lián)通3G
6."2G"請求859次
7."ctnet"請求957次
8."ctwap"請求923次
9."uninet"請求532次 //中國聯(lián)通2G
10.其他請求2191次
麻痹的,累死我了沉颂。原始方法条摸,誰讓你不學正則!麻痹的兆览!說說結(jié)論:
wifi訪問占了三分之二強屈溉,2G訪問不到10%塞关。也有可能是2G網(wǎng)速差所以請求不夠多抬探,暫未分析2G設(shè)備數(shù)。
4.統(tǒng)計各頁面訪問情況
online,私信小压,主頁线梗,匹配。待續(xù)
【注】分析online
時應排除翻頁時的POST請求怠益。
1.
online
被訪問了11762次仪搔,其中GET請求3905次。(' /online2'有空格蜻牢,NP++烤咧,排除refer的影響)
2.匹配
被訪問了10336次。讓我吃驚的數(shù)據(jù)抢呆,目前功能和體驗都很差呀煮嫌!
3.用戶主頁
被訪問了31534次。考慮翻頁請求抱虐,profile:online的比例終于有合理解釋了
4.私信
發(fā)送了2478條昌阿。 MySQL語句獲得
參考資料
理論篇
深入理解HTTP協(xié)議
認識User Agent
【UserAgent的歷史變遷】小品文,我要笑哭起來了
【瀏覽器野史 UserAgent列傳】