Jsoup.parse()与Jsoup.parse() - 或者如何在Jsoup中使用URL检测?

时间:2011-08-22 00:47:46

标签: java html-parsing jsoup

Jsoup有2个 html parse()方法:

  1. parse(String html) - “因为没有指定基本URI,所以绝对URL 检测依赖于包含标签的HTML。“
  2. parse(String html, String baseUri) - “HTML的网址 是从。用于解析绝对URL的相对URL, 在HTML声明标记之前发生。“
  3. 我很难理解意思两者之间的差异:

    1. 在第二个parse()版本中,“解析发生的绝对URL的相对URL”是什么 之前 HTML声明<base href>标记“是什么意思?如果是的话 页面中出现<base href>标记从不
    2. 绝对URL检测的目的是什么?为什么Jsoup需要 找到绝对的URL?
    3. 最后,但最重要的是:baseUri是HTML网页的完整网址 (如原始文档中所述)或者是 base 的URL HTML页面?

1 个答案:

答案 0 :(得分:4)

它用于其他Element#absUrl(),以便您可以检索<a href><img src><link href><script src>的(预期)绝对网址,等。

for (Element link : document.select("a")) {
    System.out.println(link.absUrl("href"));
}

如果您还想下载和/或解析链接的资源,这非常有用。


  

在第二个parse()版本中,“解析绝对URL的相对URL,在HTML声明<base href>标记之前发生的”是什么意思?如果页面中永远不会出现<base href>标记怎么办?

某些(可怜的)网站可能在<{em} <link>标记之前声明了<script><base>相对网址。或者,如果没有<base>标记,则只需使用给定的baseUri来解析整个文档的相对网址。


  

绝对URL检测的目的是什么?为什么Jsoup需要找到绝对URL?

要在Element#absUrl()上返回正确的网址。这纯粹是为了最终用户的便利。 Jsoup不需要它来成功解析HTML。


  

最后,但最重要的是:baseUri是HTML网页的完整网址(如原始文档中所述)还是HTML网页的基本网址?

前者。如果是后者,那么文件就会撒谎。 baseUri不得与<base href>混淆。