【Python實戰篇】如何一次過檢查大量網頁有否更新?

【Python實戰篇】如何一次過檢查大量網頁有否更新?
Photo Credit:Reuters/達志影像
我們想讓你知道的是

以Python寫一個自動檢查多個網址有否更新的程式(見下表),可以追蹤相關網頁的最新動態。

筆者工作需要,不時要檢查一大堆網站是否有更新或變動,如港鐵(0066)是否有最新公布的新聞稿,立法會及金管局的研究部是否發布了最新研究,這些網站不少是沒有提供電郵提示,又或RSS的,因此今次以Python寫一個自動檢查多個網址有否更新的程式(見下表),可以追蹤相關網頁的最新動態。

mtr_zDsh7_1200x0

如何檢查一個網頁是否有改動呢?理論上當然可以把網頁的內容全部下載,然後與上一次下載的內容逐字逐句比較,但這頗為費時失事,較有效率的做法,是比較其雜湊值(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名單中的網頁,由於之前未有計算雜湊值,故此首次檢查都表明是有更新。

checkupdate_ULg1J_1200x0

checksiteupdate.py

p3

本文獲授權轉載。

責任編輯:周雪君

核稿編輯:王陽翎

或許你會想看
更多『評論』文章 更多『科技』文章 更多『余大千』文章
Loader