如何使用 BeautifulSoup 拆分 xml 文件中的多值属性?

How can you split a multi-valued attribute in an xml file using BeautifulSoup?

所以,我有一个 xml 数据非常混乱,需要解析它以便我可以将它插入数据库。

这里是 XML 的例子:

<GenericItem html='ID: AAA1&lt;br/&gt;Age: 12&lt;br/&gt;Name: Baryk &lt;'>
   Employee:
</GenericItem>

如何拆分 html 标签的值,以便获得姓名、年龄和 ID?

我把你的数据当成html

from bs4 import BeautifulSoup
html="""<GenericItem html='ID: AAA1&lt;br/&gt;Age: 12&lt;br/&gt;Name: Baryk &lt;'>
   Employee:
</GenericItem>
"""
soup=BeautifulSoup(html,"lxml")

我已经找到 genericitem 标签并根据 <br/> 进行拆分,内部循环拆分使用符号 : 将值作为键值对添加到 data_dict

dict_data={}
tag=soup.find("genericitem")['html'].split("<br/>")
for data in tag:
    info=data.split(":")
    value=info[0]
    data=info[1].strip()
    dict_data[value]=data

输出:

{'ID': 'AAA1', 'Age': '12', 'Name': 'Baryk <'}

试试这个!

你只需要做一些字符串 manipulation/cleaning 来获取你想要的数据。我刚打印出来,如果你想的话,你可以把它保存在一个变量中。

from bs4 import BeautifulSoup

source = "<GenericItem html='ID: AAA1&lt;br/&gt;Age: 12&lt;br/&gt;Name: Baryk &lt;'>Employee:</GenericItem>"

soup = BeautifulSoup(source, 'lxml')
for each in soup.find("genericitem").get("html").split("<br/>"):
    print(each.split(":")[1].replace("<", "").strip())

您可以使用 BeautifulSoup 和 'lxml'

进行解析和重新解析
from bs4 import BeautifulSoup as bs

to_parse = '''<GenericItem html='ID: AAA1&lt;br/&gt;Age: 12&lt;br/&gt;Name: Baryk &lt;'>
   Employee:
</GenericItem>'''

soup = bs(to_parse, 'lxml')
print([i.split(': ')[-1] for i in bs(soup.select_one('genericitem')['html'], 'lxml').select_one('p').stripped_strings])