如何解决网页链接的规范URL

时间:2012-08-05 09:35:14

标签: html groovy url-routing

背景资料:

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

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

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

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

我的问题:

当用户点击网页中的链接时,网络浏览器如何知道要求的网址?或者,当我的抓取工具在网页中找到链接时,如何知道要下载哪个网页?

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

2 个答案:

答案 0 :(得分:2)

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

这与文件系统无关。如果URL恰好映射到服务器中的文件,那么它就是服务器内部的文件。

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

答案 1 :(得分:1)

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

请参阅javadoc documentation