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

如何使用BeautifulSoup提取HTML列表li子元素内指定span的文本

问题原因

你原有代码的选择器仅定位到了li.two-columns_a节点,调用.text属性会默认提取该节点下所有后代节点的文本内容并拼接,所以会把每个li下两个span的文本都返回,不符合只提取class="red"的span文本的需求。


调整方案

你可以直接在CSS选择器中追加定位条件,精准选中目标span节点,以下是几种可行写法:

写法1:单条精准定位

data['something1'] = soup.select("li.two-columns_a:nth-child(1) span.red")[0].text.strip()
data['something2'] = soup.select("li.two-columns_a:nth-child(2) span.red")[0].text.strip()
data['something3'] = soup.select("li.two-columns_a:nth-child(3) span.red")[0].text.strip()

写法2:批量提取后按顺序赋值(效率更高,仅需一次DOM查询)

# 一次性拿到所有符合条件的red类span节点
red_span_list = soup.select("li.two-columns_a span.red")
data['something1'] = red_span_list[0].text.strip()
data['something2'] = red_span_list[1].text.strip()
data['something3'] = red_span_list[2].text.strip()

写法3:在原有li节点基础上二次筛选

如果你需要保留原有li节点的查询逻辑,可以在拿到li节点后再筛选内部的red span:

li_list = soup.select("li.two-columns_a")
data['something1'] = li_list[0].select_one("span.red").text.strip()
data['something2'] = li_list[1].select_one("span.red").text.strip()
data['something3'] = li_list[2].select_one("span.red").text.strip()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:18:02