我在使用 python 抓取 YouTube 频道的频道标签时遇到问题
I have trouble webscraping the channels tab of a YouTube channel using python
我正在尝试通过网络抓取此 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())
这里读取的输出太长 post 我无法在频道选项卡中看到单个频道的名称。我想知道频道名称是否是动态加载的,因此我无法像通常在静态网站上那样抓取它。你有解决这个问题的方法吗?
print(soup.find_all('a'))
我还尝试查找所有 <a>
标签,以便在页面中找到频道 url,但这也没有成功。它有效,但没有一个 link 可能引用频道 url。
在我看来,最好的方法是解析 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
我正在尝试通过网络抓取此 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())
这里读取的输出太长 post 我无法在频道选项卡中看到单个频道的名称。我想知道频道名称是否是动态加载的,因此我无法像通常在静态网站上那样抓取它。你有解决这个问题的方法吗?
print(soup.find_all('a'))
我还尝试查找所有 <a>
标签,以便在页面中找到频道 url,但这也没有成功。它有效,但没有一个 link 可能引用频道 url。
在我看来,最好的方法是解析 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