Python 解析格式不良的HTML/XML内容

Python 解析格式不良的HTML/XML内容,python,xml,xml-parsing,beautifulsoup,html-parsing,Python,Xml,Xml Parsing,Beautifulsoup,Html Parsing,我需要解析来自我完全无法控制的远程服务器的内容,该服务器返回类似以下内容: <alpha> <bravo>123 <charlie>Some Multiline Text </alpha> <alpha> <bravo>456 <charlie>More text </alpha> <html> <body> <alpha>

我需要解析来自我完全无法控制的远程服务器的内容,该服务器返回类似以下内容:

<alpha>
<bravo>123
<charlie>Some
Multiline
Text
</alpha>

<alpha>
<bravo>456
<charlie>More text
</alpha>
<html>
    <body>
        <alpha>
        <bravo>123</bravo>
        <charlie>Some
        Multiline
        Text</charlie>
        </alpha>

        <alpha>
        <bravo>456</bravo>
        <charlie>More text</charlie>
        </alpha>
    </body>
</html>
[
    { bravo: ... , charlie: ... }
    { bravo: ... , charlie: ... }
]
虽然我想要类似的东西:

<alpha>
<bravo>123
<charlie>Some
Multiline
Text
</alpha>

<alpha>
<bravo>456
<charlie>More text
</alpha>
<html>
    <body>
        <alpha>
        <bravo>123</bravo>
        <charlie>Some
        Multiline
        Text</charlie>
        </alpha>

        <alpha>
        <bravo>456</bravo>
        <charlie>More text</charlie>
        </alpha>
    </body>
</html>
[
    { bravo: ... , charlie: ... }
    { bravo: ... , charlie: ... }
]
在下一行换行之前,我不能只读取每个节点的内容,因为内容有时跨越多行

有没有人有办法让我分析这个?或者推荐另一个库使用?

您需要解析它,让它在引擎盖下使用
lxml解析器

BeautifulSoup(data, "xml")
注意,这需要安装
lxml
模块

演示:

印刷品:

[
    {'bravo': u'123Some\nMultiline\nText456More text', 'charlie': u'Some\nMultiline\nText'}, 
    {'bravo': u'456More text', 'charlie': u'More text'}
]

汤有多美有什么问题?@JoranBeasley我无法区分
bravo
charlie
值,因为它将它们嵌套在一起,试图首先修复标记,非常感谢您的详细回复,但是我很难理解如何只读取每个标签的内容,而不包括下面所有标签的内容。我在我的OP中没有明确说明这一点,在您的示例中,
bravo
值仍然包括
charlie
值,我需要将它们分开,尽管服务器响应的标记很糟糕with@Greg不客气。是不是每次都能从服务器上得到什么?换句话说,
bravo
charlie
是否总是在没有结束标记的情况下出现?谢谢。据我所知,是的,每个对象都有完全相同的属性/子对象tags@Greg首先,正如您所看到的,您仍然可以在dict列表中获取值(即使在
BeautifulSoup
alpha
s内部嵌套了子项…)@Greg但是,是的,我们仍然可以在加载
BeautifulSoup
后重新排列节点-将
charlie
向上移动一级。