Парсинг youtube c помощью Jsoup

398
19 января 2017, 03:01

Подскажите правильно направление. Использую Jsoup для парсинга странницы на youtube. Столкнулся со следующей проблемой, что не могу отловить "длительность" ролика. Видео загружается после того как страница загрузилась. Условия таковы, что использовать Youtube API нельзя. Спасибо.

Document doc = Jsoup.connect(url)
                .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                .header("Accept-Language", "en")
                .timeout(60000)
                .ignoreContentType(true)
                .get();
String durationSt = doc.select("span[class='ytp-time-duration']").text();
System.out.println("длительность ролика: " + durationSt);
Answer 1

Дело в том, что указанного span[class='ytp-time-duration'] в самом документе не существует. Он создается JavaScript, который исполняется браузером после загрузки страницы. Библиотек JSOUP JavaScript не выполняет и поэтому вы не сможете найти эти данные на в документе.

Вы можете:

  1. Использовать Selenium - он полностью имитирует действия пользователя и выполняет JavaScript, то есть вы сможете найти именно эти данные.

  2. Посмотреть как выглядит документ без запуска JavaScript и поискать эти данные в нем. Скорей всего там они выглядят примерно так

    <span class="accessible-description" id="description-id-122142">
       - Duur: 36:05.
    </span>
Answer 2

Пробую разобраться с selenium, но всё равно не выходит пробую так:

WebDriver driver = new HtmlUnitDriver();
driver.get("https://www.youtube.com/watch?v=XnpKHQwJS4k");
WebElement element = driver.findElement(By.xpath("//span[@class='ytp-time-duration']"));

Что нужно ещё сделать? Selenium ругается, что Unable to locate a node.

READ ALSO
Правильная сетка CSS

Правильная сетка CSS

Нужно сделать правильную сетку с помощью CSS и желательно FlexboxВот так у меня выглядит сейчас

400
Как поставить на кнопку запуск файла .html [требует правки]

Как поставить на кнопку запуск файла .html [требует правки]

Понимаю, что это азы и должно быть очень простоПодскажите, как через кнопку в

405
Кнопка которая задает массив

Кнопка которая задает массив

Создал функцию которая создает таблицу и передал ей массив , далее создал 2 инпута и кнопкуКак же задать массив написав его значения инпута...

467