2011-05-10 34 views
2

URL規範化的主要目的之一是避免在產生完全相同結果的不同URL上請求GET檢查重複內容時未進行GET操作

現在,我知道你可以檢查canonical tag甚至比較兩個URL的HTML,看看它們是否相同,但是你必須兩次下載完全相同的資源才能做到這一點,之前說過。

有沒有辦法檢查重複的內容只做一個HEAD請求?如果沒有,有沒有辦法只下載網頁的<head>部分而不下載整個文檔?

我可以想到最後一個解決方案,我只是想知道是否有直接的解決方案。

+0

翻閱[Wikipedia文章](http ://en.wikipedia.org/wiki/URL_normalization),在我看來,您似乎正在描述與URL規範化不同的問題。網絡爬蟲將規範化URL以確保它使用的是規範版本;您似乎正在描述一個問題,即同一網站上的兩個不同的*,但已*規範化的* URL可以產生相同的結果輸出。我是否正確表徵了您的問題? – 2011-05-10 22:54:06

+0

@羅伯特哈維 - 正確。規範化URL通常是減少重複內容的一種方法。我正在尋找一種方法來避免發出兩個GET請求來確定兩個URL是否具有相同的確切HTML,並使URL正常化。通過這種方式,Web爬行器中的URL規範化本身並不是必需的。我正在考慮散列HEAD請求響應,這有多可靠? – Ben 2011-05-10 23:29:09

+0

規範化URL不會使重複內容最小化;它最小化了*相同的* URL可以呈現給網絡爬蟲的可能方式的數量,以便它不必重複爬取相同的頁面。將兩個不同的標準化URL指向同一頁面是一個不同的問題。 – 2011-05-10 23:35:38

回答

1

根據MSDN文檔爲您的問題的解決方案是如下

Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest) 
Dim myHttpWebResponse As HttpWebResponse = CType(myHttpWebRequest.GetResponse(), HttpWebResponse) 
Console.WriteLine(ControlChars.Lf + ControlChars.Cr + "The following headers were received in the response") 
Dim i As Integer 
While i < myHttpWebResponse.Headers.Count 
    Console.WriteLine(ControlChars.Cr + "Header Name:{0}, Value :{1}", myHttpWebResponse.Headers.Keys(i), myHttpWebResponse.Headers(i)) 
    i = i + 1 
End While 
myHttpWebResponse.Close() 

讓我解釋一下這個第一行代碼創建一個HttpWebRequest的使用指定的URL和第二行和第三行顯示所有標題呈現從URI和第四到第八行收到的響應 - Headers屬性是WebHeaderCollection。使用它的屬性來遍歷集合並顯示每個頭,然後第十個關閉請求,如果你想要網頁的唯一頭部部分,那麼PHP類免費提供在http://www.phpclasses.org/package/4033-PHP-Extract-HTML-contained-in-tags-from-a-Web-page.html