You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BeautifulSoup抓取YouTube页面时find返回None、findAll返回空数组求解

问题原因及解决方案

核心原因

  • 动态内容渲染:YouTube的绝大多数页面元素通过JavaScript在浏览器端动态加载生成,requests.get()仅能获取初始静态HTML源码,该源码中不存在你要查找的class="style-scope ytd-app"的div元素,因此调用查找方法会返回空数组或None。
  • 反爬机制拦截:默认无请求头的requests请求会被YouTube的反爬策略识别为爬虫,返回的内容为验证页面或非完整用户页面,也会导致目标元素不存在。

可行解决方法

方案1:直接提取静态标签内容(仅需获取视频标题时使用)

如果你仅需要获取当前视频的标题,无需提取其他动态渲染元素,可直接从静态HTML的内置标签提取,无需查找动态生成的类名:

from bs4 import BeautifulSoup
import requests

yt_link = "https://www.youtube.com/watch?v=bKDdT_nyP54"
# 添加模拟浏览器的请求头,绕过基础反爬校验
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
response = requests.get(yt_link, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
# 直接提取title标签的文本内容
title = soup.title.text
print(title)

方案2:使用支持JS渲染的工具(需获取大量动态元素时使用)

替换requests为支持JS渲染的自动化工具,比如Selenium、Playwright,这类工具会模拟完整的浏览器运行环境,等待页面所有动态内容加载完成后再提取元素,即可找到对应类名的目标节点。


内容的提问来源于stack exchange,提问作者rocz you

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 22:15:08