文章介紹
在上一篇博文中,我講述了利用Python的selenium模塊抓取動(dòng)態(tài)數(shù)據(jù)的方法點(diǎn)擊打開(kāi)鏈接柱恤,那么這些抓到的數(shù)據(jù)如何處理呢驮瞧?可以寫入到excel表格中制成表格,進(jìn)而畫成統(tǒng)計(jì)圖表直觀顯示出來(lái)瀑晒。例如按照時(shí)間軸統(tǒng)計(jì)網(wǎng)站的在線人數(shù),查看哪個(gè)時(shí)間段人最多徘意,哪個(gè)時(shí)間段人最少苔悦,從而網(wǎng)站維護(hù)人員可以按照合適的時(shí)間分配資源,用戶則可以選擇合適的時(shí)間訪問(wèn)椎咧。
要做到以上所述的數(shù)據(jù)處理玖详,涉及到兩個(gè)問(wèn)題:
一是如何把數(shù)據(jù)寫入已存在的表格中,并且多次寫入不會(huì)影響先前的數(shù)據(jù)勤讽;
二是如何每隔一段時(shí)間運(yùn)行抓取動(dòng)態(tài)數(shù)據(jù)的函數(shù)和寫入到excel表格的函數(shù)蟋座,Linux下用crontab很好解決,但windows則比較麻煩脚牍。
解決思路
第一個(gè)問(wèn)題向臀,用xlwt模塊不能解決,因?yàn)閤lwt每次都會(huì)把excel文件中已存在的數(shù)據(jù)清除再寫入诸狭,用xlutils模塊可以將數(shù)據(jù)寫入到已存在的excel中而且不影響sheet中原有的數(shù)據(jù)券膀。你需要安裝xlutils模塊君纫,聯(lián)網(wǎng)狀態(tài)下cmd直接輸入pip install xlutils,系統(tǒng)會(huì)找到Python的安裝目錄直接下載解壓并安裝這個(gè)模塊三娩。等到終端提示完成后可以看看庵芭,在C:\Python27\Lib\site-packages目錄下有沒(méi)有selenium模塊,這個(gè)目錄取決于你安裝Python的路徑雀监。如果有xlutils和xlutils-1.7.1-py2.7.egg-info這兩個(gè)文件夾双吆,代表模塊可以在Python程序中被加載了。另外還要安裝xlrd模塊会前,由這個(gè)模塊的子模塊open_workbook對(duì)excel文件執(zhí)行打開(kāi)操作好乐,返回文件對(duì)象讓xlutils的copy子模塊重寫數(shù)據(jù)進(jìn)去,安裝xlrd的方法同上瓦宜。
第二個(gè)問(wèn)題蔚万,其實(shí)沒(méi)那么復(fù)雜,一開(kāi)始還考慮是不是要用到os.system(command)或者windows計(jì)劃任務(wù)什么的临庇?但是往簡(jiǎn)單的角度想反璃,直接寫一個(gè)循環(huán):循環(huán)里面執(zhí)行抓取動(dòng)態(tài)數(shù)據(jù)的函數(shù)和寫入到excel表格的函數(shù),然后time.sleep(x)讓進(jìn)程暫停x秒假夺,接著跳入下一次循環(huán)即可淮蜈。至于什么時(shí)候終止循環(huán),引入計(jì)數(shù)變量即可已卷。
程序?qū)崿F(xiàn)
思路已經(jīng)有了梧田,直接上代碼。
運(yùn)行程序侧蘸,會(huì)自動(dòng)實(shí)現(xiàn)下面一系列的操作:
打開(kāi)瀏覽器并且打印抓取到的數(shù)據(jù)列表->把數(shù)據(jù)寫入到excel中->計(jì)數(shù)變量加1->關(guān)閉session和關(guān)閉瀏覽器裁眯。
每隔半小時(shí)執(zhí)行一次上述的操作流,這里程序設(shè)計(jì)成當(dāng)計(jì)數(shù)變量到20的時(shí)候跳出循環(huán)讳癌,終止程序運(yùn)行穿稳。
運(yùn)行效果
在終端打印的結(jié)果如下(前4次循環(huán)的結(jié)果):
版塊名稱和在線人數(shù)寫入到excel表格里的效果如下:
從中選擇某幾個(gè)版塊,以時(shí)間為橫坐標(biāo)晌坤,在線人數(shù)為縱坐標(biāo)逢艘,插入折線圖,畫出統(tǒng)計(jì)圖表:
這里時(shí)間跨度不大泡仗,在線人數(shù)變化不多埋虹,因此折線圖的效果不是很明顯猜憎,如果讓程序運(yùn)行一天娩怎,統(tǒng)計(jì)24小時(shí)內(nèi)各個(gè)時(shí)間段的在線人數(shù)情況,變化就比較明顯了胰柑。按照這種方法實(shí)現(xiàn)統(tǒng)計(jì)在線人數(shù)截亦,簡(jiǎn)單直接爬泥,并且系統(tǒng)開(kāi)銷很小。唯一要保證的是崩瓤,你的瀏覽器能正確訪問(wèn)指定的url袍啡,程序不會(huì)異常(好像也不好保證的說(shuō)= = )。