【问题标题】:How do I ignore certain tags in lxml before parsing it?如何在解析之前忽略 lxml 中的某些标签?
【发布时间】:2014-06-26 20:11:29
【问题描述】:

我正在使用 lxml 来解析一些 xml。一些标签的 html 格式错误,导致 lxml 抛出错误。我们想跳过“Tag1”并能够解析文档的其余部分。我们尝试了以下方法,但仍然收到错误“lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: b”:

s = '<?xml version="1.0" encoding="UTF-8"?><myroot><Tag1><b>this is some malformed</Tag1><Tag2>We will continue on</Tag2></myroot>'
xml = etree.fromstring(s)
etree.strip_elements(xml, 'Tag1')
print xml.find('.//Tag2').text

发生错误是因为我们解析文档然后尝试忽略 Tag1。有没有办法在我们解析lxml中的文档之前忽略Tag1?

谢谢!

【问题讨论】:

    标签: python regex lxml


    【解决方案1】:

    改用 lxml.html.fromstring()。它更宽容 HTML 主义。 html 版本读取您的示例没有错误。

    【讨论】:

      【解决方案2】:

      您可以使用 BeautifulSoup 来解析损坏的 html (xml)。

      import bs4
      s = '<?xml version="1.0" encoding="UTF-8"?><myroot><Tag1><b>this is some malformed</Tag1><Tag2>We will continue on</Tag2></myroot>'
      root=bs4.BeautifulSoup(s, 'lxml')
      print root.find('tag2').text #-> We will continue on
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-15
        • 2016-01-13
        • 2021-06-23
        相关资源
        最近更新 更多