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
相关产品推荐
相关产品推荐

