Python實戰 | 如何一次檢查大量網頁是否更新?

機器學習算法與Python學習2018-10-04 18:02:37

源 | The News Len    譯 | @IT技術頭條

整理 | AI時間

以Python寫一個自動檢查多個網址是否更新的,可以追蹤相關的最新動態

因為小編工作需要,不時要檢查一大堆網站是否有更新或變動,如一些技術博主是否有最新公佈的文章,公司的研究部是否發佈了最新研究,這些網站不少是沒有提供電郵提示,又或RSS的,因此今次以Python寫一個自動檢查多個網址是否更新的程序,可以追蹤相關網頁的最新動態。

如何檢查一個網頁是否有改動呢?理論上當然可以把網頁的內容全部下載,然後與上一次下載的內容逐字逐句比較,但這頗為費時失事,較有效率的做法,是比較其(hash value)。雜湊值的原理,是把一些資料輸入到密碼演算法,然後加密成一個固定長度的字串。以MD5的演算法來舉例,如果將"carrie lam"以md5加密,則會得出一個32個字符長的雜湊值"2383d47724fe0ec51c1384d404fc3487",若果將"carrie lam"改成"karrie lam",雜湊值便變成"4fc21c59f233f52de83c4e61d6b8ccc5",雖然只是差之毫釐,但其雜湊值已面目全非。

雜湊值的另一個特性,是無論輸入多大的數據量,其雜湊值都是一個固定長度的字符,就算你把整個harddisk的數據、或一出電影的檔案數據輸入,其MD5雜湊值都是32個字符。雖然輸入的組合無限,而32個字符的組合看似有限,但都可以確保不同組合出現相同雜湊值的可能性極低,因此雜湊值已被廣泛應用於不同用途。加密貨幣如比特幣,便大量應用雜湊值來把交易數據加密,及加入區塊鏈。不過,由於MD5已被破解,故此比特幣使用的是更先進的SHA-256及橢圓曲線加密法( Elliptic Curve Digital Signature Algorithm)。

這次製作的這個程序,就是把網頁的整頁資料下載,並以MD5算法計算其雜湊值,然後與上一次的雜湊值比較,若兩者不同,即代表網頁已有資料改變,這時便會通知。當然,這個簡單的程式有其限制,就是即使網頁有改變,也不一定是用户想知的資料,用户還是要親自檢查,同時,有些網頁可能動態改變內容,令本程式以為網頁每次都在更新。

本程序的用處,不是追蹤那些更新頻密的網頁,如新聞網站,而是一些只會間竭性更新的網頁,如企業網站或政府部門網頁,如果用户需要追蹤數十至上百個這些網頁,則本程式是一個幫倒忙的選擇。

回到程式本身,其結構很簡單,用户只需要在名為site的list中,輸入自己要追蹤的網頁,程式會建立一個json檔案,然後把網址及其雜湊值存入,在下次再執行程式時,便會比較網址最新的雜湊值與上次儲存的雜湊值是否一致,若否則指出網頁有更新或變動。用户可以自由修改或增刪網頁名單,程式會自動更新json檔案,但若是新加入site名單中的網頁,由於之前未有計算雜湊值,故此首次檢查都表明是有更新。

Github傳送門:

checksiteupdate.py

今日推薦

《Python項目開發實戰》

通過實際項目增強你的Python技能

  本書為你呈現真實世界中的Python編程

覆蓋了基本的創建應用、構建和封裝庫

在有經驗的Python教員一直為你提供有價值的幫助下

教程並開始創建項目。


閲讀原文

TAGS: