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

BeautifulSoup选取面包屑倒数第二个子元素报错求助

解决面包屑倒数第二个元素获取问题

错误原因

你使用的span:nth-last-child(2)选择器逻辑有误:父元素.breadcrumbs的子元素包含<span>和<i>箭头标签,nth-last-child(2)会选中倒数第二个所有类型的子元素(也就是箭头<i>),导致无法匹配到目标span,返回None后调用.text就触发了AttributeError。

修复方案

以下两种方式可可靠适配面包屑数量为2或3的场景:

方法1:先提取所有面包屑span,再取倒数第二个

先获取.breadcrumbs下所有<span>元素,通过索引定位倒数第二个:

import requests
from bs4 import BeautifulSoup

r = requests.get(link)
soup = BeautifulSoup(r.content, 'lxml')  

# 获取所有面包屑span元素
breadcrumb_spans = soup.select('.breadcrumbs span')
if len(breadcrumb_spans) >= 2:
    target_span = breadcrumb_spans[-2]
    # 优先取a标签文本,没有则取span本身文本
    listname = target_span.find('a').text if target_span.find('a') else target_span.text
    print(listname)
else:
    print("面包屑数量不足")

方法2:使用nth-last-of-type(2)选择器

该选择器仅针对父元素下同类型的子元素(即所有<span>)取倒数第二个,自动避开箭头<i>的干扰:

import requests
from bs4 import BeautifulSoup

r = requests.get(link)
soup = BeautifulSoup(r.content, 'lxml')  

target_element = soup.select_one('.breadcrumbs span:nth-last-of-type(2)')
if target_element:
    listname = target_element.find('a').text if target_element.find('a') else target_element.text
    print(listname)
else:
    print("未找到目标元素")

适配说明

两种方法都能自动适配不同面包屑数量:

  • 面包屑有3个span(Home/List1/List2):取倒数第二个(List1)
  • 面包屑有2个span(Home/List1):取倒数第二个(Home)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:15:11