一個網頁是否更新,是不少爬蟲開發人員都會碰到的問題,若是隻是一次性抓取來使用,那這個問題可有可無,抓一遍完事,可是工程中的爬蟲一般須要長期運行,若是內容更新,須要及時抓取。html
這是一個常見的獲取更新內容的思路,這種方式無狀態,傻瓜式的,我並不須要知道網頁到底更新哪些內容,我只要每次拿網頁的內容去數據庫裏去重插入便可。 這種思路問題就是浪費資源。不管對方更新沒有,都得去抓取一遍。web
RSS(簡易信息聚合),一種基於XML格式的內容包裝和投遞協議,能夠用於同步網頁內容,目前適用於博客,新聞等。 這種思路問題是並非全部網站都提供RSS源的,雖然說有萬能的rsshub,可是rsshub也是須要開發人員本身去維護的。算法
If-Modified-Since: 容許在對應的內容未被修改的狀況下返回304未修改( 304 Not Modified )維基百科, 示例:If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT數據庫
If-Modified-Since可用於web緩存,它是HTTP header的一個部分,若HTTP響應有一個Last-Modified頭,緩存可使用If-Modified-Since頭來發出一個條件請求,來查看它是否已經改變。緩存
這種思路操做以下: 1 第一次先請求某個網頁,抓取到本地,假設文件名爲 a.html。這時文件系統有個文件的修改時間。服務器
2 第二次訪問網頁,若是發現本地已經有了 a.html,則向服務器發送一個 If-Modified-Since 的請求。 把 a.html 的修改時間寫到請求裏。app
3 若是網頁更新了,服務器會返回一個 200 的應答,這時就從新抓取網頁,更新本地文件。ssh
4 若是網頁沒有更新,服務器會返回一個304的應答。這時就不須要更新文件了。網站
這種思路的問題是這種方法適用於靜態網頁的更新,對於動態從服務器取數據的動態網頁不適用。htm
這裏的網頁內容指的是網頁的正文內容,不包括訪問量等非關鍵區域文本。 網上提供的作法有網頁指紋+海明距離的算法,兩次抓取網頁海明距離越大,變化越大,海明距離的大小須要根據實際條件調整。
網頁判斷更細沒有固定套路,須要根據項目和網站狀況,選擇合適的方法進行判斷。