#java #jsoup
#java #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)
Что я хотел бы видеть, так это каждый элемент, который я запрашиваю, в списке. Далее я хочу снова проанализировать каждый элемент, но давайте сначала решим это. Надеюсь, это даст мне ноу-хау для решения остальных. Прямо сейчас я получаю пустой список каждый раз.
Большое вам спасибо.
Ответ №1:
Содержимое страницы поиска Youtube, на которую вы смотрите, отображается вашим браузером с помощью Javascript. Строка Jsoup.connect(url).get()
получит только HTML-содержимое страницы, она не будет выполнять никакого Javascript. Если вы запросите страницу с помощью cURL или какого-либо другого инструмента командной строки, вы обнаружите, что элементов, которые вы ищете, там нет.
Я не уверен точно, какова ваша цель, но вы можете захотеть заглянуть в YouTube API, чтобы посмотреть, есть ли более простой способ сделать то, что вы хотите.
Комментарии:
1. Большое спасибо. Похоже, что это было бы так. Я изучаю другие методы, и API YouTube действительно может работать здесь лучше.