我正在使用lxml
来解析HTML:
>>> from lxml.html import fromstring, tostring
在某些情况下,它会正确解析尾随空格:
>>> html = """<div>some <i>text</i> </div>"""
>>> html == tostring(fromstring(html))
True
但遇到未知标签(例如下面的blah
标签)似乎会中断。
>>> html = """<div>some <blah>text</blah> </div>"""
>>> html == tostring(fromstring(html))
False
如何修复它以包含所有标记的尾随空格?
答案 0 :(得分:0)
这似乎是由于libxml2的行为(我从下面的版本中删除了一些错误消息):
>>> print libxml2.htmlParseDoc("""<div>some <blah>text</blah> </div>""", "UTF-8")
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><div>some <blah>text</blah></div></body></html>
>>> print libxml2.htmlParseDoc("""<div>some <i>text</i> </div>""", "UTF-8")
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><div>some <i>text</i> </div></body></html>
我仍在探索解决方法。 libxml2的XML解析器没有表现出这种行为,但我认为它在破解的HTML上会更糟糕。
答案 1 :(得分:-1)
您需要在解析器中设置一个标志来删除空格。我在解析xml时已经完成了这个:
from lxml import etree
parser = etree.XMLParser(remove_blank_text=True)
data = etree.parse(open(file),parser)