Как проанализировать HTML-документ для списка элементов «имя тега» с помощью Jsoup?

У меня постоянные проблемы с разбором HTML-страницы на наличие длинных тэгов с помощью Jsoup. В моем случае я пытаюсь извлечь элементы <ytd-video-renderer> со страницы поиска YouTube. Сколько бы способов я ни пробовал. Не возвращается надежный или непустой список.

Вещи, которые я пробовал до сих пор, каждая для объекта HTML Document doc.

.select("ytd-video-renderer") (Безрезультатно, список пуст.)

.getElementsByClass("ytd-item-section-renderer") (класс встречается только в ytd-video-renderer)

.select("ytd-video-renderer.ytd-item-section-renderer")

.select("ytd-video-renderer[class*=ytd-item-section-renderer]")

.select("div#dismissable) (единственный раздел под ytd-video-renderer)

И многое другое с параметрами...

Я также пробовал любые другие теги, но у меня возникают те же проблемы.

ближе всего я пришел к успеху: .select(a[href*=watch]). Это возвращает все заголовки видео. Но, к сожалению, также некоторые другие ссылки с другим текстом. Таким образом, не надежный.

У меня установлена ​​Java 8 и последняя версия Jsoup.

Вот код, реализующий Jsoup:

public class SearchPage {
    private Document doc;
    public SearchPage(String url){
        try {
            doc = Jsoup.connect(url).get();
        } catch (IOException ex) {
            //taking care of my error cats
        }
    }
    public Elements test(){  //just to test
        return doc.getElementsByTag("ytd-item-renderer");
    }
}

Пример того, что я пытаюсь извлечь: Изображение блоков HTML, которые я ищу

Кажется, я что-то упускаю, так как многие говорят, что Jsoup классный и простой... (тогда не в моем случае :v)

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

Спасибо большое.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
160
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Содержимое страницы поиска Youtube, которую вы просматриваете, отображается вашим браузером с помощью Javascript. Строка Jsoup.connect(url).get() получит только HTML-контент страницы, она не будет выполнять какой-либо Javascript. Если вы запросите страницу с помощью cURL или другого инструмента командной строки, вы обнаружите, что искомых элементов там нет.

Я не совсем уверен, какова ваша цель, но вы можете заглянуть в API YouTube, чтобы узнать, есть ли более простой способ сделать то, что вы хотите.

Большое спасибо. Похоже, так оно и было. Я изучаю другие методы, и API YouTube действительно может работать здесь лучше.

Sparkles the unicorn 03.04.2019 21:19

Другие вопросы по теме