У меня постоянные проблемы с разбором 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)
Я хотел бы видеть каждый элемент, который я запрашиваю в списке. Далее я хочу снова проанализировать каждый элемент, но давайте сначала решим это. Надеюсь, это даст мне ноу-хау, чтобы решить остальные. Прямо сейчас я получаю пустой список каждый раз.
Спасибо большое.




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