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

使用BeautifulSoup无法获取span标签文本,出现AttributeError报错如何解决?

报错原因
  • 你通过find_all("tr")获取到的所有行标签中,部分<tr>标签内部不存在class为secondaryInfo的span标签,find方法找不到对应元素时会返回None,此时强行调用.text属性就会触发AttributeError。
  • 额外影响因素:IMDB的榜单页面部分内容为动态渲染生成,你使用HTMLSession发起请求后没有执行JS渲染逻辑,部分动态标签未加载完成,也会提升获取到None的概率。
解决方法

先执行页面JS渲染、调整解析源,同时增加非空判断即可,修正后的代码如下:

from bs4 import BeautifulSoup
from requests_html import HTMLSession

session = HTMLSession()
response = session.get("https://www.imdb.com/chart/boxoffice/?ref_=nv_ch_cht")
# 执行JS渲染,加载所有动态生成的页面元素
response.html.render()
# 解析渲染完成后的完整HTML内容
soup = BeautifulSoup(response.html.html, 'html.parser')
# 精准定位包含电影信息的行标签,避免遍历到无目标内容的表头/空行
movie_rows = soup.select("tr.ipc-metadata-list-summary-item__c")

for row in movie_rows:
    movie_name = row.find("span", class_ = "secondaryInfo")
    # 非空判断后再调用text属性
    if movie_name:
        print(movie_name.text.strip())

核心调整点:

  • 新增response.html.render()执行页面JS渲染,确保动态内容全部加载完成
  • 改用渲染后的response.html.html作为解析源,而非未渲染的原始response.content
  • 使用更精准的选择器定位包含目标内容的行,减少无效遍历
  • 取文本前增加非空判断,规避属性不存在的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:24:07