在 Python 上使用 BeautifulSoup 从 XML 文件中提取内容

Extracting contents from an XML file with BeautifulSoup on Python

提问人:Hamza Ahmed 提问时间:3/15/2023 更新时间:3/15/2023 访问量:37

问:

我有一个这样的XML结构:

<Trainers>
 <Trainer name="VisitorID" value=" NPRoiuKL213kiolkm2231"/>
 <Trainer name="VisitorNumber" value="BR-76594823-009922"/>
 <Trainer name="ServerIndex" value="213122"/>
 <Trainer name="VisitorPolicyID" value="ETR1234123"/>
</Trainers>

我想根据 Trainer 名称提取值。所以基本上是这样:

NPRoiuKL213kiolkm2231从 、 从 等。.VisitorIDBR-76594823-009922VisitorNumber

如果可能的话,我也想看看我是否可以提取。<Trainers>

我可以在 Pandas 上使用 '' 执行此操作并获取一个表,但我想单独获取这些值,以便我可以验证从 Pandas 创建的表。read_xml

这是我尝试过的:

soup = BeautifulSoup(Trainee.xml, 'xml')
soup.find_all({"Trainer name": "VisitorID"})
soup.find_all({"Trainer name": "VisitorNumber"})
soup.find_all({"Trainer name": "ServerIndex"})
soup.find_all({"Trainer name": "VisitorPolicyID"})

我期望这能起作用,但这些给了我空数组,
我在这里遗漏了什么吗?当我通过 Pandas 解析它时,我得到了一个合适的表,但单独我得到的是一个空数组。
[]read_xml

任何帮助将不胜感激!

非常感谢!

python xml 验证 beautifulsoup xml 解析

评论


答:

0赞 Andrej Kesely 3/15/2023 #1

如果我理解正确的话,你想得到所有,并从中得到所有/对:<Trainers>namevalue

from bs4 import BeautifulSoup

xml_doc = """\
<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_doc, "xml")

for item in soup.select("Trainers"):
    for trainer in item.select("Trainer"):
        print(trainer["name"], trainer["value"])

指纹:

VisitorID  NPRoiuKL213kiolkm2231
VisitorNumber BR-76594823-009922
ServerIndex 213122
VisitorPolicyID ETR1234123

如果要从数据构造数据帧,可以使用以下示例:

df = pd.DataFrame(
    [
        {t["name"]: t["value"] for t in item.select("Trainer")}
        for item in soup.select("Trainers")
    ]
)
print(df)

指纹:

                VisitorID       VisitorNumber ServerIndex VisitorPolicyID
0   NPRoiuKL213kiolkm2231  BR-76594823-009922      213122      ETR1234123

评论

0赞 Hamza Ahmed 3/16/2023
非常感谢您的回答!这真的很有帮助!我只想问一个关于这个问题的附加问题。因此,我想根据培训师名称检索值。我想在 BeautifulSoup 中输入“VisitorID”,并希望将“NPRoiuKL213kiolkm2231”作为输出返回。你知道我可以对这个答案进行什么更改来得到这个吗?非常感谢!