2012-08-05 29 views
0

背景资料:如何解决网页的网址cannonical链接

我试图建立在Groovy一个很简单的网络爬虫。只要有一个URL地址,就可以下载关联的网页和从该网页链接的所有页面。

在HTML代码中的链接中,URL地址有时会缩写。三种不同类型的URL浮现在脑海中:

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

不过,我知道的一个事实,即Web应用程序可以实现任意URL路由和网址因此地址可能不会反映filesys的结构总之。

我的问题:

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

有关可用Groovy库解析URL的任何提示也值得赞赏。

回答

1

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

请参阅javadoc documentation

2

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

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

规范URLs是不同的。使用link元素与rel=canonical,页面可以指定它的规范URL,例如,它应该用于搜索引擎。见例如http://googlewebmastercentral.blogspot.fi/2009/02/specify-your-canonical.html

+0

感谢您的回答。这是否意味着要实现我的爬虫,我需要研究适当的RFC并相应地实现算法?你知道我可以使用的任何现有库(在我的Groovy项目中)为我处理这个问题吗? – 2012-08-05 12:31:47