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

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

То, что я пробовал до сих пор, каждое для объекта HTML-документ 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) (единственный div в 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)

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

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

1 Ответ

0 голосов
/ 03 апреля 2019

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

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

...