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

使用BeautifulSoup提取无类名span内文本,解决AttributeError报错问题

解决BeautifulSoup爬取墨西哥Indeed职位薪资的AttributeError问题

错误原因

该报错的核心触发逻辑是:并非所有职位卡片都公开了薪资数据,当card.find("div", {"class" : "salary-snippet"})找不到对应节点时会返回None,直接对None调用find()方法就会抛出属性不存在的错误。

解决方案

方案1:直接提取aria-label属性(更简便)

你给出的HTML结构中,薪资内容已经提前存放在salary-snippet节点的aria-label属性里,不需要再向下查找span节点,代码如下:

salary_snippet = card.find("div", class_="salary-snippet")
salary = salary_snippet["aria-label"].strip() if salary_snippet else "无公开薪资"

方案2:逐层判断节点存在性

如果需要严格取span内的文本,可以逐层做非空判断,避免链式调用的报错:

salary = "无公开薪资"
salary_snippet = card.find("div", class_="salary-snippet")
if salary_snippet:
    salary_span = salary_snippet.find("span")
    if salary_span:
        salary = salary_span.text.strip()

方案3:用CSS选择器简化代码

通过select_one方法直接定位目标span,代码更简洁:

salary_ele = card.select_one("div.salary-snippet span")
salary = salary_ele.text.strip() if salary_ele else "无公开薪资"

补充注意事项

如果所有带公开薪资的职位都匹配不到对应节点,请打印当前card的HTML源码,确认你抓取到的页面结构和浏览器端查看的结构一致。Indeed存在反爬机制,部分动态加载的内容直接用requests无法获取,需要搭配Selenium、Playwright等无头浏览器工具抓取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:54:05