无法从元素中提取食物名称,求非抓取值的BeautifulSoup解决方案
解决提取XML标签名称的问题
嘿,我懂你的需求了——你要的不是标签包裹的文本值(比如green、red这些颜色),而是标签本身的名称(apple、strawberry、banana)对吧?你的当前代码只是选中了<foods>父元素,所以才会输出完整的元素内容,我们调整一下逻辑就能拿到想要的结果。
方法一:通过父元素遍历子标签
先找到<foods>元素,再获取它的所有直接子标签,然后提取每个标签的name属性:
from bs4 import BeautifulSoup content=""" <foods> <apple>green</apple> <strawberry>red</strawberry> <banana>yellow</banana> </foods> """ 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=""" <foods> <apple>green</apple> <strawberry>red</strawberry> <banana>yellow</banana> </foods> """ 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
相关产品推荐
相关产品推荐

