Jsoup.parse() 与 Jsoup.parse() - 或者 Jsoup 中的 URL 检测如何工作?

Reg*_*kie 5 java html-parsing jsoup

Jsoup 有 2 个html parse() 方法:

  1. parse(String html) - “由于没有指定基本 URI,绝对 URL 检测依赖于包含标签的 HTML。”
  2. parse(String html, String baseUri) - “从中检索 HTML 的 URL。用于将相对 URL 解析为绝对 URL,发生在 HTML 声明标签之前。”

我很难理解两者之间差异的含义

  1. 在第二个版本中,“在HTML 声明标签之前parse()将相对 URL 解析为绝对 URL ”是什么意思?如果 页面中从未出现过标签怎么办?<base href><base href>
  2. 绝对URL检测的目的是什么?为什么Jsoup需要查找绝对URL?
  3. 最后但也是最重要的:是baseUriHTML 页面的完整 URL(如原始文档中的措辞)还是HTML 页面的基本URL?

Bal*_*usC 5

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

for (Element link : document.select("a")) {
    System.out.println(link.absUrl("href"));
}
Run Code Online (Sandbox Code Playgroud)

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


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

一些(较差的)网站可能在标签声明了<link>或 以及<script>相对 URL 。或者,如果没有标记,则仅使用给定的标记来解析整个文档的相对 URL。<base><base>baseUri


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

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


最后但最重要的是:baseUri 是 HTML 页面的完整 URL(如原始文档中的措辞)还是 HTML 页面的基本 URL?

前者。如果是后者,那么文档就会撒谎。切勿baseUri与 混淆<base href>