27
Окт
2020

Как получить или спарсить идентификатор видео Youtube?

Столкнулся с такой проблемой - пользователь вводит текст боту, и этот текст передается в запрос на поиск видео в Youtube; но перед тем как писать логику бота - я решил перепроверить и сделать ее в отдельном файле. Хочу отметить, что требуется это сделать без selenium и Youtube API !

Я отправляю запрос методом GET и хочу получить идентификатор /watch?=значение, но никаким способом парсинга мне не удается получить это значение, так как данный идентификатор загружается в динамическом скрипте. Если вывести html с помощью r.text, то поиском в консоли можно обнаружить данный идентификатор в тэге <scrtipt>...</script>(в моем случае интересует href="/watch?v=o_l4Ab5FRwM. Данные из этого тэга, можно сказать, являются преогромнейшим словарем, и разобраться в нем крайне трудно.

Также я понимаю, что bs4 не работает со скриптами, но я хочу получить значение из этого тэга:

a id="thumbnail" class="yt-simple-endpoint inline-block style-scope ytd-thumbnail" aria-hidden="true" tabindex="-1" rel="null" href="/watch?v=o_l4Ab5FRwM">

Если проверить в консоли - в дереве HTML не обнаружить ни этот class ни этот id. Приведу небольшой пример кода:

import requests
from bs4 import BeautifulSoup

r = requests.get('https://www.youtube.com/results?search_query=five+finger+death+punch')
print(r.text)

# Написал только для примера, что эти варианты не подходят!  
#soup = BeautifulSoup(r.content, 'html.parser')
#sel = '#thumbnail'
#soup.select(sel).get('href')
#soup.find('a', class_='yt-simple-endpoint inline-block style-scope ytd-thumbnail')

Как мне получить данный идентификатор видео? Я так полагаю, что можно сделать это регулярным выражением, но я пока что слаб в этой теме, поэтому хочу увидеть более альтернативные варианты. Спасибо!

Блок HTML, откуда требуется получить это значение:

  <div id="overlays" class="style-scope ytd-thumbnail"><ytd-thumbnail-overlay-resume-playback-renderer class="style-scope ytd-thumbnail"><!--css-build:shady--><div id="progress" class="style-scope ytd-thumbnail-overlay-resume-playback-renderer" style="width: 10%;"></div></ytd-thumbnail-overlay-resume-playback-renderer><ytd-thumbnail-overlay-time-status-renderer class="style-scope ytd-thumbnail" overlay-style="DEFAULT"><!--css-build:shady--><yt-icon class="style-scope ytd-thumbnail-overlay-time-status-renderer" disable-upgrade="" hidden=""></yt-icon><span class="style-scope ytd-thumbnail-overlay-time-status-renderer" aria-label="7 минут 13 секунд">
</span></ytd-thumbnail-overlay-time-status-renderer><ytd-thumbnail-overlay-now-playing-renderer class="style-scope ytd-thumbnail"><!--css-build:shady--><span class="style-scope ytd-thumbnail-overlay-now-playing-renderer">Текущее видео</span>
</ytd-thumbnail-overlay-now-playing-renderer></div>
  <div id="mouseover-overlay" class="style-scope ytd-thumbnail"></div>
  <div id="hover-overlays" class="style-scope ytd-thumbnail"></div>
</a>

Источник: https://ru.stackoverflow.com/questions/1196444/%D0%9A%D0%B0%D0%BA-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%B8%D0%BB%D0%B8-%D1%81%D0%BF%D0%B0%D1%80%D1%81%D0%B8%D1%82%D1%8C-%D0%B8%D0%B4%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80-%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-youtube

Тебе может это понравится...

Добавить комментарий