【问题标题】:Check duplicate content without doing a GET在不执行 GET 的情况下检查重复的内容
【发布时间】:2011-05-10 22:47:57
【问题描述】:

URL 规范化的主要目的之一是避免 GET 对不同 URL 的请求产生完全相同的结果。

现在,我知道您可以检查canonical tag,甚至可以比较两个 URL 的 HTML 以查看它们是否相同,但是您必须下载完全相同的资源两次才能做到这一点,这不是重点我之前说过。

有没有办法检查重复的内容只做一个 HEAD 请求?如果没有,有没有办法只下载网页的<head> 部分而不下载整个文档?

我能想到最后一个的解决方案,我只是想知道是否有直接的解决方案。

【问题讨论】:

  • 查看Wikipedia article,在我看来,您描述的问题与 URL 规范化所带来的问题不同。网络爬虫将规范化 URL 以确保它使用的是规范版本;您似乎在描述一个问题,即同一网站上的两个不同但已经规范化的 URL 可以产生相同的结果输出。我是否正确描述了您的问题?
  • @Robert Harvey - 正确。规范化 URL 通常是一种减少重复内容的方法。我正在寻找一种方法来避免发出两个 GET 请求以确定两个 URL 是否具有相同的确切 HTML,使 URL 标准化与否。这样,Web 爬虫中的 URL 规范化本身就不是必需的。我正在考虑对 HEAD 请求响应进行哈希处理,这有多可靠?
  • 规范化 URL 不会最小化重复内容;它最大限度地减少了 same URL 可以呈现给网络爬虫的可能方式的数量,因此它不必重复爬取同一页面。让两个不同的标准化 URL 指向同一个页面是一个不同的问题。
  • @Robert Harvey 正确,但是发出两个 HEAD 请求 (1kb) 要好得多。
  • 好吧,根据this,,您可以执行 HEAD 请求而不是 GET 请求,它应该只返回页眉。现在您需要做的就是在每个页眉中放置一些唯一的 ID 元素(如 GUID 或页 ID 号),然后您可以根据其他 HEAD 请求检查 ID 是否重复。

标签: html url duplicate-data


【解决方案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()

让我解释一下这段代码 第一行使用指定的 URL 创建一个 HttpWebRequest,第二行和第三行显示从 URI 和第四到第八行接收到的响应中存在的所有标头 - Headers 属性是一个 WebHeaderCollection。使用它的属性来遍历集合并显示每个标题和第十个以关闭请求,如果您想要网页的唯一标题部分,则可以在http://www.phpclasses.org/package/4033-PHP-Extract-HTML-contained-in-tags-from-a-Web-page.html免费获得 PHP 类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 2023-04-10
    相关资源
    最近更新 更多