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

无法从元素中提取食物名称,求非抓取值的BeautifulSoup解决方案

解决提取XML标签名称的问题

嘿,我懂你的需求了——你要的不是标签包裹的文本值(比如green、red这些颜色),而是标签本身的名称(apple、strawberry、banana)对吧?你的当前代码只是选中了<foods>父元素,所以才会输出完整的元素内容,我们调整一下逻辑就能拿到想要的结果。

方法一:通过父元素遍历子标签

先找到<foods>元素,再获取它的所有直接子标签,然后提取每个标签的name属性:

from bs4 import BeautifulSoup
content=""" &lt;foods&gt; &lt;apple&gt;green&lt;/apple&gt; &lt;strawberry&gt;red&lt;/strawberry&gt; &lt;banana&gt;yellow&lt;/banana&gt; &lt;/foods&gt; """
soup = BeautifulSoup(content,"lxml")
# 获取foods父元素下的所有子标签
food_tags = soup.find("foods").find_all()
# 提取每个标签的名称
food_names = [tag.name for tag in food_tags]
print(food_names)
# 输出结果: ['apple', 'strawberry', 'banana']

方法二:用CSS选择器直接选中子元素

如果你更习惯用CSS选择器,可以用foods > *来选中<foods>下的所有直接子元素,再提取名称:

from bs4 import BeautifulSoup
content=""" &lt;foods&gt; &lt;apple&gt;green&lt;/apple&gt; &lt;strawberry&gt;red&lt;/strawberry&gt; &lt;banana&gt;yellow&lt;/banana&gt; &lt;/foods&gt; """
soup = BeautifulSoup(content,"lxml")
# 用CSS选择器选中foods下的所有子元素
food_tags = soup.select("foods > *")
food_names = [tag.name for tag in food_tags]
print(food_names)
# 输出结果同样是: ['apple', 'strawberry', 'banana']

核心思路就是:你需要定位到那些食物对应的子标签,而不是它们的父元素<foods>,然后通过标签对象的name属性获取标签名称,这样就完全避开了标签内的文本值啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:51:09