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

使用Python的BeautifulSoup提取XML内容时遭遇空数组问题求助

问题解决:BeautifulSoup提取XML属性值返回空数组的原因及修复

问题原因

你使用find_all的语法错误,{"Trainer name": "VisitorID"}这种写法不符合BeautifulSoup的查询规则。BeautifulSoup要求先指定目标标签名,再单独声明属性过滤条件,而不是把标签和属性合并成一个字典键。

正确的提取方法

1. 单个属性值提取

先定位到指定的Trainer标签,再通过get()方法获取value属性:

from bs4 import BeautifulSoup

# 假设你的XML内容存储在xml_content变量中
xml_content = """
<Trainers>
 <Trainer name="VisitorID" value=" NPRoiuKL213kiolkm2231"/>
 <Trainer name="VisitorNumber" value="BR-76594823-009922"/>
 <Trainer name="ServerIndex" value="213122"/>
 <Trainer name="VisitorPolicyID" value="ETR1234123"/>
</Trainers>
"""

soup = BeautifulSoup(xml_content, 'xml')

# 提取VisitorID对应的value
visitor_id_tag = soup.find("Trainer", name="VisitorID")
if visitor_id_tag:
    visitor_id = visitor_id_tag.get("value").strip()  # 去除值开头的空格
    print(visitor_id)  # 输出: NPRoiuKL213kiolkm2231

# 提取VisitorNumber对应的value
visitor_number_tag = soup.find("Trainer", name="VisitorNumber")
if visitor_number_tag:
    print(visitor_number_tag.get("value"))  # 输出: BR-76594823-009922

2. 批量提取所有属性值

如果需要一次性获取所有Trainer的name和value,可以循环遍历标签生成字典,方便和Pandas的结果对比验证:

trainer_data = {}
for trainer_tag in soup.find_all("Trainer"):
    name_attr = trainer_tag.get("name")
    value_attr = trainer_tag.get("value").strip()
    trainer_data[name_attr] = value_attr

print(trainer_data)
# 输出结果:
# {
#     'VisitorID': 'NPRoiuKL213kiolkm2231',
#     'VisitorNumber': 'BR-76594823-009922',
#     'ServerIndex': '213122',
#     'VisitorPolicyID': 'ETR1234123'
# }

3. 提取<Trainers>节点本身

要获取整个<Trainers>节点,可以直接用find方法定位标签:

trainers_node = soup.find("Trainers")
# 打印节点的格式化内容
print(trainers_node.prettify())

关键语法说明

  • soup.find("Trainer", name="VisitorID"):等价于soup.find("Trainer", {"name": "VisitorID"}),两种写法都能定位到name属性为VisitorID的Trainer标签。
  • 使用get("value")而不是直接访问["value"]更安全,避免标签不存在该属性时抛出异常。
  • 调用strip()是因为你的VisitorID的value开头有空格,根据需求可以选择保留或去除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:57:40