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

Python爬虫提取元素属性时出现KeyError: return self.attrs[key]如何解决?

问题原因
  • 核心报错原因是代码中find("span")默认匹配jobTitle类h2标签下的第一个span,部分招聘帖的第一个span为职位标识标签,本身没有title属性,直接通过["title"]取值会触发KeyError。
  • 现有代码无异常兼容逻辑,若页面结构变动、单条招聘数据缺少对应字段,还可能出现AttributeError导致爬虫中途终止。
解决方法

方案1:精准定位带title属性的span

直接指定查找带有title属性的span标签,无需按顺序匹配,修改title取值逻辑即可:

# 原错误写法
# title = result.find("h2", {"class": "jobTitle"}).find("span")["title"]

# 修改后写法
job_title_h2 = result.find("h2", {"class": "jobTitle"})
title_span = job_title_h2.find("span", attrs={"title": True}) if job_title_h2 else None
title = title_span["title"] if title_span else "未知职位"

方案2:增加异常捕获避免爬虫中断

如果希望单条数据解析失败不影响整体爬取进度,可新增异常捕获逻辑,完整修改后的代码如下:

def extract_indeed_job():
    jobs = []
    result = requests.get(f"{url}&start={0*LIMIT}")
    result_soup = BeautifulSoup(result.text, "html.parser")
    results = result_soup.find_all("a", {"class": "tapItem"})
    for result in results:
        try:
            title = result.find("h2", {"class": "jobTitle"}).find("span", attrs={"title": True})["title"]
            company = result.find("span", {"class": "companyName"}).get_text()
            location = result.find("div", {"class": "companyLocation"}).get_text()
            print(title, company, location)
            jobs.append({"title": title, "company": company, "location": location})
        except (AttributeError, KeyError):
            # 单条数据解析失败直接跳过
            continue
    return jobs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:06:02