如何在解析lxml之前忽略某些标签?
我在用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呢?
谢谢!
2 个回答
1
可以使用 lxml.html.fromstring() 这个方法。它对 HTML 的一些小问题更宽容。用这个方法可以顺利读取你的示例,而不会出现错误。
0
你可以使用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