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

使用BeautifulSoup的get_text()提取评分时,div无文本触发AttributeError求助

解决BeautifulSoup提取评分时的AttributeError问题

嘿,这个问题我之前也踩过坑!当box.find(class_='hGSR34')找不到对应元素时,它会返回None,这时候再强行调用.get_text()自然就触发AttributeError了。咱们可以用几种简单的方式来处理这种情况,让代码更健壮:

方法1:先检查元素是否存在再提取文本

最直观的思路就是先判断找到的元素是不是None,再决定要不要提取文本:

import requests
from bs4 import BeautifulSoup
page = requests.get('https://www.flipkart.com/exercise-fitness/fitness-equipment/home-gym-combos/pr?sid=qoc,amf,pz0&q=gym+equipments+combo+50+kg&otracker=categorytree')
soup = BeautifulSoup(page.content, 'html.parser')
container = soup.find('div', class_='t-0M7P _2doH3V')
boxes = container.find_all('div', class_="_3liAhj")
for box in boxes:
    title = box.find(class_='_2cLu-l').get_text()
    print(title)
    # 先获取评分元素,再判断是否存在
    rating_elem = box.find(class_='hGSR34')
    rating = rating_elem.get_text() if rating_elem else "无评分"
    print(rating)
    price = box.find(class_='_1vC4OE').get_text()
    print(price)
    print()

方法2:用get_text()的默认参数(BeautifulSoup 4.9.0+支持)

如果你的BeautifulSoup版本是4.9.0及以上,可以直接用更简洁的写法——给get_text()传一个默认值,这样即使元素不存在也不会报错:

rating = box.find(class_='hGSR34').get_text(default="无评分")

这个写法本质和方法1逻辑一致,只是把判断逻辑封装到了get_text()方法里,代码更清爽。

方法3:用try-except捕获异常

要是你不确定还有哪些元素可能找不到,用异常捕获的方式会更灵活:

try:
    rating = box.find(class_='hGSR34').get_text()
except AttributeError:
    rating = "无评分"
print(rating)

这种方式能兜底处理各种意外的AttributeError场景。

另外悄悄说一句:你获取title和price的时候也可能遇到同样的问题哦,如果某个商品没有标题或价格,代码照样会报错,建议也用类似的方式处理一下,让整个爬虫更稳~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:42:48