2011-08-25 21 views
0

我使用lxml解析HTML: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 

我該如何解決它以包含所有標籤的尾部空白?

回答

-1

您需要在解析器本身設置一個標誌來刪除空格。我做這個解析XML時,像這樣:

from lxml import etree 

parser = etree.XMLParser(remove_blank_text=True) 

data = etree.parse(open(file),parser) 
+0

不好意思,但這與OP想要的是相反的:他想保留空白。問題是'HTMLParser'(可以解析格式不正確的html)在''之後拋出空白,可能是因爲某些html特定的清理。 – Steven

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

您是否曾經能夠找到解決方法? – mrjbq7