У меня возникли проблемы с веб-настройкой вкладки каналов канала YouTube с использованием python

#python #web-scraping #youtube

#python #веб-очистка #YouTube

Вопрос:

Я пытаюсь создать веб-настройку вкладки каналов этого канала YouTube: https://www.youtube.com/c/mkbhd/channels

Моя цель — извлечь названия упомянутых каналов (которые выделены на изображении ниже) : введите описание изображения здесь

Вот как выглядит мой товар :

 import requests
from bs4 import BeautifulSoup


r = requests.get('https://www.youtube.com/c/mkbhd/channels')
html_content = r.text

soup = BeautifulSoup(html_content)
print(soup.prettify())
 

Читая вывод, который слишком длинный для публикации здесь, я не смог увидеть название одного канала на вкладке каналы. Интересно, загружаются ли названия каналов динамически, и поэтому я не смог бы очистить его, как обычно, на статическом веб-сайте. У вас есть решение этой проблемы?

 print(soup.find_all('a'))
 

Я также попытался найти все <a> теги, чтобы найти URL-адреса каналов на странице, но это также не увенчалось успехом. Это сработало, но не было ни одной ссылки, которая потенциально могла бы ссылаться на URL-адрес канала.

Ответ №1:

Мне кажется, что лучшим способом сделать это было бы проанализировать JSON в HTML, а не использовать BeautiulSoup.

 import requests, json


r = requests.get('https://www.youtube.com/c/mkbhd/channels')
html_content = r.text

content = json.loads((html_content.split('var ytInitialData = ')[1].split(';')[0]))

for item in content["contents"]["twoColumnBrowseResultsRenderer"]["tabs"][4]["tabRenderer"]["content"]["sectionListRenderer"]["contents"][0]["itemSectionRenderer"]["contents"][0]["gridRenderer"]["items"]:
    print(item["gridChannelRenderer"]["title"]["simpleText"])
 

Это не самый красивый, но работает хорошо.

Вывод:

 20syl
Madeon
Jonathan Morrison
Brandon Havard
Vinh Dang
Austin Evans
Unbox Therapy
UrAvgConsumer
 

Комментарии:

1. Спасибо, это работает, но знаете ли вы более чистый способ?

2. @Nassims Рад слышать, что это сработало, вы можете поставить зеленую галочку, если считаете, что это выбранный вами ответ. Я не думаю, что будет более чистый способ лично, я бы использовал это. По моему опыту, JSON предпочтительнее BeautifulSoup.