99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀糟了,上網(wǎng)記錄被 Python 扒下來了
糟了,上網(wǎng)記錄被 Python 扒下來了
2019-08-22
收藏
糟了,上網(wǎng)記錄被 Python 扒下來了

作者 | 蘇克1900

來源 | 高級農(nóng)民工

長時間使用瀏覽器會積累大量瀏覽器歷史記錄,這些是很隱私的數(shù)據(jù),里面甚至可能有一些不可描述的網(wǎng)站或者搜索記錄不想讓別人知道。不過,我們自己可能會感興趣,天天都在上網(wǎng),想知道長期下來是都在摸魚還是有認(rèn)真工作。

其次,了解下自己每天打開多少次網(wǎng)頁、哪些網(wǎng)站上的最多、常搜哪些關(guān)鍵詞,這些也很有趣。

下面就來給大家介紹一款 Python 編寫的神工具,可以一鍵分析你的上網(wǎng)行為。我用了后發(fā)現(xiàn)了很多不可思議的結(jié)論。

比如訪問次數(shù)最多的網(wǎng)站居然是微信公眾號,7000 多次,看來弄自媒體占了大量上網(wǎng)時間。

糟了,上網(wǎng)記錄被 Python 扒下來了

看到了每天打開網(wǎng)站的次數(shù),平均都有好幾百次,8 月 8 號那天發(fā)生了什么,竟打開了 1600 多次!

糟了,上網(wǎng)記錄被 Python 扒下來了

然后又統(tǒng)計了停留時間最長的網(wǎng)頁頁面,在 http://md.aclickall.com/ 這個網(wǎng)站居然停留了 660 小時,這是個文章排版網(wǎng)站,因為經(jīng)常要排版所以把該頁面固定了起來。

糟了,上網(wǎng)記錄被 Python 扒下來了

然后統(tǒng)計出了搜索最多的十個關(guān)鍵詞,python 居然是第一位!前十中基本都是數(shù)據(jù)編程相關(guān)的,沒想到自己這么愛學(xué)習(xí)。

糟了,上網(wǎng)記錄被 Python 扒下來了

最后統(tǒng)計出了各大搜索引擎的使用率。google 的使用率達(dá)到了 97.3%,而百度只有不到 3%,大概是偶爾無法科學(xué)上網(wǎng)的時候用了下百度。

糟了,上網(wǎng)記錄被 Python 扒下來了

怎么樣是不是挺有意思?下面就來說說怎么用這款工具,讓你也可以分分鐘了解自己的上網(wǎng)行為,非常簡單。

這款 Python 工具其實(shí)就是分析瀏覽器的歷史記錄數(shù)據(jù)庫文件然后可視化。這里的瀏覽器只支持 Chrome 和以 Chrome 為內(nèi)核的瀏覽器,比如 Centbrower 、360極速瀏覽器等,其他瀏覽器比如 ie、Firefox 不支持。如果有登陸賬號,桌面端和電腦端會一起分析,更全面。

第一步,打開網(wǎng)站:Browser History Analysis

糟了,上網(wǎng)記錄被 Python 扒下來了

接著上傳你的瀏覽器歷史記錄文件,這個歷史記錄文件怎么獲得呢?

新建一個標(biāo)簽頁,輸入 chrome://version/ 回車,可以打開你的瀏覽器詳細(xì)信息:

糟了,上網(wǎng)記錄被 Python 扒下來了

復(fù)制「個人資料路徑」到資源管理器打開,然后找到 history 文件復(fù)制一份到桌面。

糟了,上網(wǎng)記錄被 Python 扒下來了

接著就在剛才的網(wǎng)站中上傳該文件(我的文件有 15MB 大),稍等片刻就可以得到上門的那些可視化分析結(jié)果。

你可能會擔(dān)心上傳瀏覽器歷史記錄是否安全,盡管放心,這個程序是開源的。

下面再簡單說下如何用 python 一步步實(shí)現(xiàn)的這個程序功能的,這是一個很棒的 python 練手項目,涉及到了前后端的知識,整個程序包含多個文件:

Code

├─ app_callback.py 回調(diào)函數(shù),實(shí)現(xiàn)后臺功能

├─ app_configuration.py web服務(wù)器配置

├─ app_layout.py web前端頁面配置

├─ app_plot.py web圖表繪制

├─ app.py web服務(wù)器的啟動

├─ assets web所需的一些靜態(tài)資源文件

│ ├─ css web前端元素布局文件

│ │ ├─ custum-styles_phyloapp.css

│ │ └─ stylesheet.css

│ ├─ image web前端logo圖標(biāo)

│ │ ├─ GitHub-Mark-Light.png

│ └─ static web前端幫助頁面

│ │ ├─ help.html

│ │ └─ help.md

├─ history_data.py 解析chrome歷史記錄文件

└─ requirement.txt 程序所需依賴庫

每個程序?qū)崿F(xiàn)的功能:

糟了,上網(wǎng)記錄被 Python 扒下來了

具體實(shí)現(xiàn)思路大致分為下面幾點(diǎn):

  • 解析歷史記錄文件數(shù)據(jù)

歷史記錄 history 是一個 sqllite 數(shù)據(jù)庫文件,連接數(shù)據(jù)庫查詢?nèi)缓笳{(diào)用數(shù)據(jù)庫中的信息并存儲。

  • 配置 web 服務(wù)器和前端頁面
  • 可視化繪圖函數(shù)

可視化圖形使用的是可交互式的 plotly 庫。

小結(jié)

上網(wǎng)記錄是很重要的隱私數(shù)據(jù),平常自己可能無法從中直接發(fā)現(xiàn)什么,使用 Python 簡單一分析就可以發(fā)現(xiàn)很多東西,所以平時盡量注重隱私保護(hù)。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }