使用BeautifulSoup4选择元素时遇Index out of range错误,需获取指定li的ID
问题修复指南
你的代码里踩了几个坑:
- 选择器写错了:
select('ease ')是找<ease>标签,但你要的是class为ease的<li>元素,正确写法是.ease(类选择器必须加.前缀),更严谨的话用li.ease直接定位li元素。 - 属性名不匹配:你代码里在获取
data-productsize-combid这类属性,但提供的HTML结构里,目标<li>只有id属性,根本不存在这些自定义属性,这会直接触发报错。 - 空值风险未处理:如果
soup.find()找不到目标<ul>,会返回None,后续调用.select()会直接报错,得先确认ul元素存在再继续。
改好的代码:
# 先定位目标ul元素 target_ul = soup.find("ul", {"class": "product-attributes list-inline product-attributes-two-sizes"}) if target_ul: # 筛选class为ease的li元素 ease_li_items = target_ul.select("li.ease") for li in ease_li_items: # 获取li的id,用get方法避免属性不存在时触发异常 li_id = li.get("id") if li_id: print(li_id) # 需要存入列表的话添加下面这行 # id_list.append(li_id)
关键说明:
li.ease作为选择器,精准锁定class包含ease的<li>元素,避免匹配到其他无关元素。- 用
li.get("id")替代直接li["id"],如果元素没有id属性,get()会返回None,不会抛出KeyError异常。 - 增加
target_ul的非空判断,防止找不到目标ul时后续代码直接报错。
内容的提问来源于stack exchange,提问作者drag6ter
相关产品推荐
相关产品推荐

