0

背景资料:

我正在尝试在 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 地址可能根本不反映文件系统的结构。

我的问题:

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

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

4

2 回答 2

2

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

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

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

于 2012-08-05T09:46:40.360 回答
1

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

请参阅javadoc 文档

于 2012-08-15T13:53:51.443 回答