Jsoup извлекает только несколько строк из HTML с самого начала, что составляет даже 25% - PullRequest
0 голосов
/ 16 июня 2020

Когда я пытаюсь сделать CTRL + U на веб-сайте, это больше, чем то, что я получаю от jsoup. Сайт, который я использую, - Open SAP -> https://open.sap.com/courses Пробовали тайм-аут и maxbodysize вместе с jsoup.connect. Сейчас мой код выглядит так:

private static String getHtml(String location) throws IOException {
    URL url = new URL(location);
    URLConnection conn = url.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String input;
    StringBuilder builder = new StringBuilder();
    while((input = in.readLine()) != null)
    {
         builder.append(input);
    }

    return builder.toString();
}
document = Jsoup.parse(getHtml(URL));

Но все равно возвращается тот же HTML. По селену это возможно, но это немного медленнее, поэтому какой-либо другой способ добиться этого? Потому что цель - найти ссылки на курсы, а затем загрузить их, чтобы найти их краткое изложение курса, которое с использованием селена будет слишком медленным.

Пожалуйста, предложите, что можно здесь сделать.

1 Ответ

1 голос
/ 17 июня 2020

Содержание этой страницы создается в вашем браузере на основе js. Для этого вам понадобится фреймворк с поддержкой js.

Используя HtmlUnit, я получил такую ​​страницу

String url = "https://open.sap.com/courses";

try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_68)) {
    webClient.getOptions().setThrowExceptionOnScriptError(false);

    HtmlPage page = webClient.getPage(url);
    webClient.waitForBackgroundJavaScriptStartingBefore(10_000);

    System.out.println("-------------------------------");
    System.out.println(page.asText());
    System.out.println("-------------------------------");
}

HtmlUnit имеет богатый API, чтобы делать все, что вам нравится, с объектом страницы например, поиск элементов управления / содержимого, щелчок по элементам управления или извлечение текста из частей страницы.

...