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

如何用Python BeautifulSoup提取A、SPAN标签文本并存入列表

解决方案

调整逻辑

  • 原代码直接调用tag.span.text,当span标签不存在时会触发AttributeError,因此需要先做非空校验再取值
  • 额外兼容span标签存在但文本为空的场景,两种异常场景均统一返回自定义默认值(默认为空字符串,可自行修改)

完整可运行代码

from bs4 import BeautifulSoup
import re
import string

markup = """
<dd class="ingredient">
    <a href="#">Farina</a>
    <span>500 g</span>
</dd>
<dd class="ingredient">
    <a href="#">Uova</a>
    <span>1</span>
</dd>
<dd class="ingredient">
    <a href="#">Sale</a>
    <span>100 g</span>
</dd>
<!-- 测试无span的场景 -->
<dd class="ingredient">
    <a href="#">Zucchero</a>
</dd>
<!-- 测试span为空的场景 -->
<dd class="ingredient">
    <a href="#">Lievito</a>
    <span></span>
</dd>
"""

soup = BeautifulSoup(markup, 'html.parser')

allIngredients = []
for tag in soup.find_all(attrs={'class' : 'ingredient'}):
    link = tag.a.get('href')
    nameIngredient = tag.a.string

    # 新增span非空判断逻辑
    quantityIngredient = ""
    span_tag = tag.span
    if span_tag:
        contents = span_tag.text
        quantityIngredient = re.sub(r"\s+", " ", contents).strip()

    allIngredients.append([nameIngredient, quantityIngredient])

print(allIngredients)

运行输出示例

[['Farina', '500 g'], ['Uova', '1'], ['Sale', '100 g'], ['Zucchero', ''], ['Lievito', '']]

如果需要把空用量替换为其他提示文本,直接修改quantityIngredient = ""的默认值即可,比如改为quantityIngredient = "按需添加"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:24:05