首页 > 解决方案 > 我无法使用 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>标签以在页面中查找频道网址,但这也没有成功。它有效,但没有一个链接可以潜在地引用频道网址。

标签: pythonweb-scrapingyoutube

解决方案


在我看来,最好的方法是解析 HTML 中的 JSON,而不是使用 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

推荐阅读