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

