使用BeautifulSoup4爬取YouTube首页视频作者无返回结果如何解决
解决方案
问题原因
- class属性匹配规则错误:HTML中class属性的空格是多个独立类名的分隔符,直接传入带空格的字符串作为class_参数时,BeautifulSoup会将其识别为单个完整类名,无法匹配到对应元素。
- 静态请求无法获取动态渲染内容:YouTube首页的视频、作者等核心内容都是页面加载完成后通过JavaScript异步请求渲染的,直接用urllib发起请求拿到的初始源码中不存在目标标签,就算class规则写对也匹配不到结果。
修复步骤
修正class匹配规则
将class_参数的字符串改为包含所有待匹配类名的列表:
# 错误写法 # soup.find_all('a', class_='yt-simple-endpoint style-scope yt-formatted-string') # 正确写法 soup.find_all('a', class_=['yt-simple-endpoint', 'style-scope', 'yt-formatted-string'])
使用支持JS渲染的工具获取页面源码
使用Selenium模拟浏览器访问,拿到完全渲染后的页面源码再解析,完整可运行代码如下:
from selenium import webdriver from bs4 import BeautifulSoup as bs import time # 需提前安装对应浏览器驱动,例如Chrome对应chromedriver driver = webdriver.Chrome() driver.get('https://www.youtube.com/') # 等待页面渲染完成,可根据网络情况调整等待时长 time.sleep(3) source = driver.page_source driver.quit() soup = bs(source, 'lxml') for author_tag in soup.find_all('a', class_=['yt-simple-endpoint', 'style-scope', 'yt-formatted-string']): # 提取标签内的文本即为作者名称 print(author_tag.text.strip())
如果需要获取更多作者信息,可以添加模拟页面滚动的逻辑,触发YouTube加载更多内容。
内容的提问来源于stack exchange,提问作者Ian Kilty
相关产品推荐
相关产品推荐

