JSoup: Сложность извлечения одного элемента - PullRequest
0 голосов
/ 20 сентября 2019

Для моего проекта по программированию в колледже мне поручено извлечь из биткойнов живую стоимость биткойнов и включить ее в мини-программу биткойнов.Проблема в том, что у меня возникают трудности с извлечением стоимости биткойнов с определенных сайтов.Любая помощь будет принята с благодарностью.

Я пробовал использовать разные веб-сайты со смешанными результатами.

Пример 1

    final String url = "https://www.coindesk.com/price/bitcoin";
    try
    {
        Document doc = Jsoup.connect(url).get();
        Element ele = doc.select("span.currency-price").first();
        final String words = ele.text();
        System.out.println(words);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }

Пример 2

    final String url = "https://cointelegraph.com/bitcoin-price-index";
    try
    {
        Document doc = Jsoup.connect(url).get();
        Element ele = doc.select("div.price-value").first();
        final String words = ele.text();
        System.out.println(words);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }

В примере 1 возникла исключительная ситуация java.lang.NullPointerException в com.mycompany.test.Test.main (Test.java:28)

Пример 2 выполнен без ошибок.

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Сайт https://www.coindesk.com/price/bitcoin в значительной степени опирается на JavaScript при представлении контента.Jsoup не может выполнить JavaScript.Он может только анализировать необработанные документы HTML.
Чтобы увидеть, что видит Jsoup, попробуйте посетить эту страницу с отключенным JavaScript.Вы увидите, что на странице отсутствует основной контент.Либо перейдите на эту страницу и нажмите Ctrl + U, чтобы проверить источник страницы перед изменением JavaScript.
Используя отладчик Chrome (вкладка «Сеть»), вы можете видеть, что он выполняет дополнительные запросы AJAX для получения текущих курсов обмена в JSON по этому URL-адресу: https://production.api.coindesk.com/v1/exchangeRates
Затем JavaScript используется для создания динамических элементов HTML для этих данных.Он также запрашивает несколько других URL-адресов для получения данных графика.

0 голосов
/ 21 сентября 2019

Jsoup не может проанализировать эту страницу из-за дополнительного "</div>" в div с react-app id.Вы можете сообщить об ошибке, как this

...