не сможет дать вам решение, но, по крайней мере, я могу дать вам несколько подсказок, которые могут помочь вам двигаться вперед.
Код, который у вас есть, не работает, потому что раздел комментариев загружается через вызов ajax после загрузки страницы. Если вы сделаете жесткую перезагрузку в своем браузере, вы увидите, что в комментариях разделов есть значок spinner и текст Loading...
, ожидающий загрузки содержимого. Когда Nokogiri получает страницу через запрос http
, он получает содержимое html, которое вы видите до, комментарии загружаются. На самом деле место, где содержимое будет добавлено позже выглядит как:
<div id="watch-discussion" class="branded-page-box yt-card">
<div id="comment-section-renderer"
class="comment-section-renderer vve-check"
data-visibility-tracking="CCsQuy8iEwjr3P3u1uzNAhXIepAKHRV9D8Ao-B0=">
<div class="action-panel-loading">
<p class="yt-spinner ">
<span class="yt-spinner-img yt-sprite" title="Loading icon">
</span>
<span class="yt-spinner-message">Loading...</span>
</p>
</div>
</div>
</div>
Вот причина, почему вы не найдете div
s вы ищете, потому что они не являются частью html у вас есть.
Рассматривая сетевую консоль в браузере, кажется, что запрос ajax для получения данных комментариев отправляется в https://www.youtube.com/watch_fragments_ajax?v=tntOCGkgt98&tr=time&distiller=1&ctoken=EhYSC3RudE9DR2tndDk4wAEAyAEA4AEBGAY%253D&frags=comments&spf=load
. Как вы можете видеть параметр v
является идентификатором видео, однако есть несколько предостережений:
- Существует
ctoken
пар, которые вы можете получить путем соскоба исходного содержимого страницы. Он находится внутри метки <script>
, в форме 'COMMENTS_TOKEN': "<token>"
.
- Однако вам все равно необходимо отправить
session_token
в виде данных формы в теле запроса AJAX (который является POST
). То, что я не знаю, откуда исходит из :(.
Я думаю, что вы будете раздвигает границы Nokogiri здесь, как AFAIK она не предназначена, чтобы следовать Ajax запросов или обработку Javascript. Может быть the ruby Selenium driver лучше подходит для этого.
НТН
Если вы не получаете результат или ошибку, вы должны подтвердить, что на самом деле получаете ожидаемый HTML-код. Отключите Javascript в своем браузере и посмотрите на эту страницу. Вы видите контент, который хотите? Используйте 'nokogiri 'https: //www.youtube.com/watch? V = tntOCGkgt98'' в командной строке и оглядитесь, или используйте' curl' или 'wget' для загрузки страницы. Если вы не можете найти его, шансы хороши, это динамический HTML, и необходимая информация недоступна, если вы не используете что-то, что может интерпретировать DHTML. –
не отвечает на ваш вопрос, но как насчет API? – nikkypx