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

使用BeautifulSoup爬取网页时如何判断指定标签是否存在

问题分析与解决方法

错误原因

你代码里的sal_play = salary.find_all('tr')[1:],find_all()方法返回的是列表类型,切片操作后得到的还是列表。而find_all()是BeautifulSoup的Tag对象或BeautifulSoup对象才有的方法,列表没有这个属性,所以触发了AttributeError。

正确的判断方法

BeautifulSoup的find_all()在找不到匹配标签时,会返回空列表(而不是None),所以判断标签是否存在,直接检查返回的列表是否为空即可。根据你的需求,提供两种常见处理方式:

方式1:直接在原对象上查找目标标签

如果你要找的tr.thead是全局的,直接在salary对象上调用find_all(),然后判断结果是否为空:

# 直接查找目标标签
target_trs = salary.find_all('tr', class_='thead')
if not target_trs:
    print('1')
else:
    # 存在目标标签,执行后续逻辑
    for tr in target_trs:
        # 处理每个匹配的tr标签
        pass

方式2:在切片后的子列表中查找

如果必须在sal_play(即salary.find_all('tr')[1:])的范围内查找,需要遍历列表中的每个Tag对象,逐个检查:

sal_play = salary.find_all('tr')[1:]
# 遍历子列表中的每个tr标签,筛选出包含目标子标签的项
target_items = [item for item in sal_play if item.find('tr', class_='thead')]
if not target_items:
    print('1')
else:
    # 处理找到的结果
    for item in target_items:
        pass

补充说明

如果只需要查找第一个匹配的标签,可以用find()方法,它找不到时会返回None,此时可以直接用if判断,这种方式更高效:

if salary.find('tr', class_='thead') is None:
    print('1')
else:
    # 处理第一个匹配的标签
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:25:30