Jsoup.parse () против Jsoup.parse () - или Как работает определение URL в Jsoup? - PullRequest
4 голосов
/ 22 августа 2011

Jsoup имеет 2 html методы parse ():

  1. parse (String html) - "Поскольку базовый URI не указан, абсолютный URL обнаружение зависит от HTML, включая тег. "
  2. parse (String html, String baseUri) - "URL, где находится HTML был получен из. Используется для преобразования относительных URL в абсолютные URL, которые происходят до того, как HTML объявит тег. "

Мне трудно понять значение различия между этими двумя понятиями:

  1. Во 2-й версии parse(), что означает "преобразование относительных URL в абсолютные URL, которые происходят до HTML объявляет тег <base href> "означает? Что если <base href> тег никогда не появляется на странице?
  2. Какова цель абсолютного определения URL? Зачем нужен Jsoup найти абсолютный URL?
  3. Наконец, но самое главное: baseUri полный URL-адрес HTML-страницы (как указано в оригинальной документации) или это base URL HTML-страница?

1 Ответ

4 голосов
/ 22 августа 2011

Используется, среди прочего, Element#absUrl(), чтобы вы могли получить (предполагаемый) абсолютный URL-адрес <a href>, <img src>, <link href>, <script src> и т. Д. Например,

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

Это очень полезно, если вы хотите загрузить и / или проанализировать связанные ресурсы.


Во 2-й версии parse () что означает «преобразование относительных URL-адресов в абсолютные URL-адреса, возникающие до того, как HTML объявит тег <base href>»? Что если тег <base href> никогда не появится на странице?

Некоторые (плохие) веб-сайты могут объявить <link> или <script> с относительным URL-адресом перед тегом <base>. Или, если нет средства для тега <base>, тогда только указанный baseUri будет использоваться для разрешения относительных URL-адресов всего документа.


Какова цель абсолютного определения URL? Почему Jsoup нужно найти абсолютный URL?

Чтобы вернуть правильный URL на Element#absUrl(). Это чисто для удобства конечного пользователя. Jsoup не нуждается в этом, чтобы успешно разобрать HTML самостоятельно.


Наконец, но самое главное: является ли baseUri полным URL-адресом HTML-страницы (как указано в оригинальной документации) или это базовый URL-адрес HTML-страницы?

Бывший. Если последнее, то документация будет врать. baseUri не следует путать с <base href>.

...