You need to enable JavaScript to run this app. 使用BeautifulSoup获取元素title属性报KeyError的解决方法
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup获取元素title属性报KeyError的解决方法

报错根源

你触发KeyError: 'title'的核心问题是找错了属性所属的标签层级:
当前代码逻辑是直接从<li>列表项标签上读取title属性,但实际维基百科对应页面的DOM结构里,<li>只是纯文本的列表容器,本身压根没有挂载title属性——真正带title值的,是<li>内部嵌套的、指向各编程语言词条的<a>超链接标签。
之前参考的同类方案不生效,本质是参考案例的网页结构是li标签直接带title,和当前维基页面的结构完全不匹配,直接硬套自然会报错。

可落地的修正方案

核心改动两个方向:

  • 不要直接对li标签做属性读取,先定位到li内部嵌套的<a>标签,再从超链接上取属性
  • 读取属性的时候不用方括号直接索引,换成get()方法做容错,避免碰到无对应属性的标签直接抛错中断程序

修正后的完整代码参考:

import requests
from bs4 import BeautifulSoup

# 加浏览器请求头,避免被维基百科反爬拦截返回403
request_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/125.0.0.0 Safari/537.36"
}
res = requests.get('https://en.wikipedia.org/wiki/List_of_programming_languages', headers=request_headers)
# 校验请求状态,确保拿到的是正常网页内容
res.raise_for_status()

soup = BeautifulSoup(res.text, 'lxml')

for col_container in soup.find_all('div', {'class': 'div-col'}):
    for list_item in col_container.find_all('li'):
        # 定位每个列表项里的超链接
        link = list_item.find('a')
        # 没有超链接的异常结构直接跳过
        if not link:
            continue
        # 用get取title,没有title就用超链接的文本内容兜底
        lang_name = link.get('title') or link.get_text(strip=True)
        print(lang_name)
实操避坑提醒
  • 稳定性优先:不要用标签["属性名"]的硬索引写法,只要碰到一个不存在对应属性的标签,整个循环就会因为KeyError中断,用标签.get("属性名")碰到不存在的属性只会返回None,稳定性高很多
  • 反爬适配:爬虫请求的时候一定要带User-Agent标识,维基百科对无标识的脚本请求拦截率很高,很多人代码逻辑写对了但拿不到正常内容,全是漏了请求头的问题

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

相关产品推荐
方舟 Agent Plan

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

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