有这个代码:
from bs4 import BeautifulSoup
import requests
ycid = input('Введите код-идентификатор канала: ') #получение идентификатор канала
url = f'https://www.youtube.com/channel/{ycid}' #создание ссылки на канал
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 7.0; Win32; x32) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
print(f'Парсим с канала: {url}')
html = requests.get(url, headers = HEADERS )
html = html.text
soup = BeautifulSoup(html, 'lxml')
div_tags = soup.find_all('div', {'class': 'style-scope ytd-grid-video-renderer', 'id': 'dismissable'})
print(div_tags)
a_tags = [div.find('a') for div in div_tags]
print(a_tags)
url_img = [a['href'] for a in a_tags]
print(url_img)
该代码应该解析来自指定频道的第一个视频,但它返回空列表。
结果:
Введите код-индитификатор канала: UCviSYAcwdnDX1UoRzAHYgNg
Парсим с канала: https://www.youtube.com/channel/UCviSYAcwdnDX1UoRzAHYgNg
[]
[]
[]
如何更正代码?

考虑一些渠道。使用 Ctrl + U 查看页面代码
如果我们搜索某个视频的标题,我们会注意到它存在于代码中,但不是以 HTML 的形式存在。
事实上,BS 在执行所有脚本等之前看到的代码可能与浏览器调试工具中的 html 代码不同。您可以获取 r.content,然后使用 json 解析器获取信息。原则上,可以不使用此方法获得视频链接:

由于您是初学者,我建议您使用 Selenium + geckodriver + BeautifulSoup。Selenium 将访问该页面,执行 javascripts 并将生成的 html 代码上传到 BS。每个视频都是一个单独的 ytd-grid-video-renderer,其类为“style-scope ytd-grid-renderer”
视频的标题包含在 id = "video-title" 的标签的标题属性中
href 包含一个没有域的链接 (/watch?v=HQxZaeGxwQs)
代码示例:
现在在 html 变量中我们页面的代码。我们将在其中找到所有视频及其名称:
类似问题:你