【问题标题】:How to resolve cannonical URLs of web page links如何解析网页链接的规范 URL
【发布时间】:2012-08-05 09:35:13
【问题描述】:

背景信息:

我正在尝试在 Groovy 中构建一个非常简单的网络爬虫。它会在给定一个 URL 地址的情况下下载相关的网页以及从该网页链接的所有网页。

在 HTML 代码中的链接中,URL 地址有时会被缩写。我想到了三种不同的 URL 类型:

  • 绝对 URL 地址(如http://www.food.com/fruit/orange.html
  • 与 Web 根目录相关的绝对 URL 地址(例如 /fruit/orange.html)
  • 相对URL地址,与当前网页所在目录相关(如../vegetables/carrot.html)

然而,我知道 Web 应用程序可以实现任意 URL 路由,因此 URL 地址可能根本不反映文件系统的结构。

我的问题:

当用户单击网页中的链接时,网络浏览器如何知道要询问哪个 URL?或者,当我的爬虫在网页中找到链接时,它如何知道要下载哪个网页?

任何关于可用 Groovy 库解析 URL 的提示也将不胜感激。

【问题讨论】:

    标签: html groovy url-routing


    【解决方案1】:

    浏览器根据 URL 规范解析相对 URL(包括与服务器根目录相关的 URL,例如 /fruit/orange.html),请参阅 Internet 标准 STD 66,目前是 RFC 3986。除了一般注意事项外,它们需要考虑<base href=...> 标签(如果存在)。

    这与文件系统无关。如果 URL 碰巧映射到服务器中的文件,那是服务器内部的。

    规范网址有所不同。使用带有rel=canonicallink 元素,页面可以指定其规范URL,例如应该在搜索引擎中使用。参见例如http://googlewebmastercentral.blogspot.fi/2009/02/specify-your-canonical.html

    【讨论】:

    • 感谢您的回答。这是否意味着要实现我的爬虫,我需要研究适当的 RFC 并相应地实现算法?你知道我可以使用哪些现有的库(在我的 Groovy 项目中)为我处理这个问题吗?
    【解决方案2】:

    标准库中提供的 java.net.URI 类提供了通过 URI#resolve(String) 方法解析相对引用的方法。

    javadoc documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多