2012-01-27 16 views
5

如何在我的應用程序(網絡或控制檯)中將類似谷歌的重新抓取引入。我只需要重新抓取那些在特定日期後更新的頁面。如何在我的應用程序(網絡或控制檯)中將類似谷歌的重新抓取

System.Net.WebResponse中的LastModified標頭僅給出服務器的當前日期。例如,如果我在2012年1月27日下載了一個包含HTTPWebRequest的頁面,並檢查LastModified日期的標題,它將顯示服務器提供頁面時的服務器當前時間。在這種情況下,僅在2012年1月27日。

任何人都可以提出任何其他方法嗎?

+0

您是否嘗試抓取其內容發生更改或服務器上的資源更改的頁面?這是一個重要的區別...如果您試圖檢測內容的變化,那麼「LastModified」將不會爲您提供該信息,因爲內容是動態提供的。 – Kiril 2012-01-27 16:28:14

+0

我想在特定時間間隔(例如10天)上安排爬網過程。重新抓取時,我只想抓取那些在上一次抓取事件後修改的頁面。 – 2012-01-30 04:49:02

+0

你沒有真正回答我的問題......當頁面上次更改和內容更改時有所不同。頁面的內容可以改變,而不需要實際的服務器資源(即頁面)改變。那麼,它是頁面還是頁面的內容呢? – Kiril 2012-01-30 14:18:38

回答

7

首先,這裏要指出的是,你要做的事情非常困難,並且有大量的研究級文件試圖解決它(我會給你一些鏈接,其中一些是等一下)。沒有辦法看到一個網站是否發生了變化而不抓取它,儘管你可以使用快捷方式,例如從響應頭中檢查Content-Length而不下載頁面的其餘部分。這將允許您的系統節省流量,但它不會以真正有用的方式解決您的問題。

其次,由於您關注的是內容,因此Last-Modified標題字段對您而言並不會很有用,我甚至會說它根本沒用。

第三,你所描述的要求有些矛盾,因爲你只想抓取更新內容的頁面,而這不完全是谷歌做的事情(但是,你想要谷歌般的抓取)。 Google抓取的重點是爲最常搜索/訪問的網站提供最新的內容。例如:Google對於經常抓取一個網站每天更新其內容兩次的興趣很少,當該網站每天有10個訪問者時,Google更感興趣的是抓取一個每天吸引1000萬訪問者的網站,即使其內容更新不太頻繁。經常更新內容的網站也可能有很多訪問者,但從Google的角度來看,這可能也是不正確的。


如果你有發現新的網站(覆蓋),並在同一時間,你想擁有你知道(新鮮)網站的最新內容,那麼你有相互衝突的目標(其中大部分是真實的抓取工具,甚至谷歌)。通常最終發生的事情是,當你有更多的覆蓋面時,你的新鮮度就會降低,如果你有更多的新鮮感,那麼你的覆蓋面就會減少。如果你有興趣在平衡兩者,那麼我建議你仔細閱讀以下條款:

的這個想法的總結是,你必須抓取一個網站幾次(也許幾百次),以便建立一個良好的衡量其歷史。一旦您有一套完善的歷史衡量標準,您就可以使用預測模型來插入網站再次更改的時間,並在預期更改後安排一段時間的抓取。

相關問題