python - 我无法使用 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>
标签以在页面中查找频道网址,但这也没有成功。它有效,但没有一个链接可以潜在地引用频道网址。
解决方案
在我看来,最好的方法是解析 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
推荐阅读
- java - 泛型的类参数
- ubuntu - NGINX 命令生成:目标“构建”的配方失败
- javascript - 使用 Javascript 读取本地文本文件不起作用
- c# - StringComparison 在 C# .NET Core 中保持 Directory.GetFiles 排序
- python - python中c++模块的内存使用情况
- button - 如何使用按钮在新选项卡中打开电子表格?
- xml - 仅使用 PHP、HTML、CSS、Javascript、ajax、jquery 和 xml 创建社交网站
- azure-data-factory - 链接服务参数化不适用于 Azure 数据资源管理器 (Kusto) 类型的链接服务
- python - 使用伪 tty 启动多个 ssh 会话时输出乱码(当 ssh 断开连接/被杀死时需要远程进程退出)
- scala - 在 Scala 中将 JSON 转换为 Map 时出错