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

