【问题标题】:How can you split a multi-valued attribute in an xml file using BeautifulSoup?如何使用 BeautifulSoup 拆分 xml 文件中的多值属性?
【发布时间】:2022-01-16 22:06:57
【问题描述】:

所以,我有一个非常混乱的 xml 数据,需要对其进行解析,以便将其插入数据库。

这是一个 XML 示例:

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

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

【问题讨论】:

    标签: beautifulsoup xml-parsing


    【解决方案1】:

    试试这个!

    您只需要进行一些字符串操作/清理即可获得您想要的数据。我刚刚打印出来了,如果你愿意,你可以把它保存在一个变量中。

    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())
    

    【讨论】:

    • 感谢您的帮助,这个有效!它既简单又好:)
    • 很抱歉再次打扰您,如果它在具有多个 GenericItem 标签的文件中怎么办。如何拆分标签值直到文件结束?
    • 您必须在该标签上使用find_all,它将返回标签列表,因此您必须对其进行迭代
    • 您可以使用 find_all 来返回列表,然后按照@BhavyaParikh 的建议对其进行循环。
    【解决方案2】:

    我已将您的数据设为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标签并根据&lt;br/&gt;和内部循环拆分使用:将值作为键值对添加到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 <'}
    

    【讨论】:

    • 谢谢你的帮助,这个也可以!我会将它用于我的另一个项目。你让我开心:)
    【解决方案3】:

    您可以使用 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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-08
      • 2019-10-21
      • 2022-08-19
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多