#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.