如何使用爬蟲監控一系列網站的更新情況?
我現在想到的方法只有每天自動把網站爬下來 然後對比新舊網站的HTML文件 才決定有沒有更新
1 第一次先請求某個網頁,抓取到本地,假設文件名為 a.html。這時文件系統有個文件的修改時間。
2 第二次訪問網頁,如果發現本地已經有了 a.html,則向伺服器發送一個 If-Modified-Since 的請求(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)。 把 a.html 的修改時間寫到請求里。
3 如果網頁更新了,伺服器會返回一個 200 的應答,這時就重新抓取網頁,更新本地文件。
4 如果網頁沒有更新,伺服器會返回一個304的應答。這時就不需要更新文件了。我歪個樓chrome有個Page Monitor的插件
這個問題已經有人做出現成產品了,你可以看一下:http://sleepingspider.com註冊成為用戶後,可以選擇需要關注的網頁,如有更新會收到郵件提醒。還有一些高級的設置,沒用過,你可以看看
陳子平的回答是通過把當前網頁的創建時間,作為 `If-Modified-Since` 的參數發給伺服器,然後看有沒有變動。但是根據 Header Field Definitions,只要請求的資源發生了變化,伺服器就會重新發送資源。感覺這個一般用於靜態文件的緩存,而現在大部分頁面都是動態的。所以我的結論是:`If-Modified-Since` 只對判斷靜態文件是否改動有效。
對於動態文件,我現在的做法是:只要代碼解析不出想要的結果,就拋出一個自定義的異常,然後讓人工去處理,查明原因後再改進代碼。所以,你如果要監視多個網站,可以使用爬蟲獲取對應的欄位,如果獲取不到,就報錯「沒有獲取到XXX信息,可能是網站更新了!」,這時你可能就要更改爬蟲獲取信息的方式。java寫的,原本想做數據分析用,後來修改為抓取磁力和電驢鏈接進行存儲。之所以抓取這兩種鏈接就是因為電驢鏈接包含文件名,文件大小,文件唯一標識,磁力鏈接獲取種子文件後同樣可以獲取詳細信息,並且磁力鏈接中也包含唯一hash值,避免資源抓取重複。
簡單說幾個比較麻煩的地方:1.對於判斷網頁更新的問題,爬蟲要避免網頁短時間重複爬,對鏈接MD5計算就行,要判斷同一個網頁是否更新可以採用計算網頁指紋然後判斷海明距離的方式,距離越大網頁變化越大,避免網頁上有時間顯示被判斷為更新的問題,這個值具體設置為多少,自己斟酌。把鏈接的MD5以及網頁指紋保存到資料庫就行,不需要保存整個網頁。2.索引使用lucene,重寫了lucene的計分規則(要計算同義詞得分和主詞得分)。
3.分詞就是IK,不過對源碼進行了下修改,因為要同義詞並且可以隨時更新字典文件。4.資料庫mysql~ 不多說了。5.對於磁力鏈接,需要轉為BT文件,可以去網上種子庫去取。也可以加入DHT網路下載(暫時沒實現,不過網上有python版本)。6.獲取磁力鏈接的方式有很多,可以通過網頁爬蟲,也可以使用DHT爬蟲,網上有很多開源的python版本。感覺挺簡單,但是實際做起來也要不少時間。http://sou.mj0351.com/也許用git對扒下來網頁做版本控制也行吧?
我的本科畢設就是這個。。
當時做了一套監控果庫、想去、花瓣市集、暖島的服務。實現方式:
1. crontab 定時任務2. node 讀取配置並調用 phantomjs(內存型瀏覽器) 訪問各鏈接並存圖。3. 所有圖片用日期分文件夾命名,用 Bootstrap 做個對比顯示。如果有這樣一套服務,我覺得挺好的。不過付費率可能是個問題。使用MD5數字簽名 每次下載網頁時,把伺服器返回的數據流ResponseStream先放在內存緩衝區,然後對ResponseStream生成MD5數字簽名S1,下次下載同樣生成簽名S2,比較S2和S1,如果相同,則頁面沒有跟新,否則網頁就有跟新。
http://distill.io
不用爬蟲,fenmiaodata就能做到監控網站的更新情況,已經成型的工具,直接拿去用
描述不夠清晰啊,如果是個人博客這樣的小網站,可以每天wget遞歸下載,看看有木有新增。
如果是某個網頁的具體內容,可以用scrapy,或者小一點的用beautifiul soup抓取,加上郵件發送或者telegram-cli都可以。
對於不懂爬蟲的人口來說,page manitor,網頁哨兵這2瀏覽器插件就可以解決上述問題。
同意根據內容計算一個md5, md5 可以存放在redis中的map中, 一個url對應一個md5
可以使用網站資訊監控工具,非常符合你的要求
推薦閱讀:
※python已正確安裝numpy但無法調用?
※我數學很差,最近報了培訓班在學Python編程,上課都能聽懂,自己寫程序的時候感覺特別難是怎麼回事?
※如何理解python的類與對象?
※爬取網頁時如何寫入文字、圖片到一個文件里?
※用 Python 寫爬蟲時應該注意哪些坑?