我很惊讶lxml.html在默认情况下在解析HTML时留下微不足道的空格。我也很惊讶我找不到任何明显的方法来使其不这样做。
Python 2.7.3 (default, Apr 10 2013, 06:20:15)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml.etree
>>> parser = lxml.etree.HTMLParser(remove_blank_text=True)
>>> html = lxml.etree.HTML("<p> Hello World </p>", parser=parser)
>>> print lxml.etree.tostring(html)
<html><body><p> Hello World </p></body></html>
我希望结果将是这样的:
>>> print lxml.etree.tostring(html)
<html><body><p>Hello World</p></body></html>
BeautifulSoup4使用html5lib解析器执行相同的操作:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup("<p> Hello World </p>", "html5lib")
>>> soup.p
<p> Hello World </p>
经过研究,我发现HTML5解析规范未指定删除连续的空格;而是在渲染时完成。因此,我知道从技术上讲,这些库都不负责执行相同的行为,但是它似乎很有用,令我感到惊讶的是它们都没有。
有人可以证明我错了吗?
编辑:
我知道如何使用正则表达式删除空格-这不是我的问题。 (我也知道如何在SO中搜索有关正则表达式的问题。)
我的问题与无关紧要的空白有关,空白的重要性由呈现HTML的标准定义。我怀疑1线正则表达式能否正确实现此标准。而且,我们甚至不必再研究正则表达式与CFG的争论了吗?
RegEx match open tags except XHTML self-contained tags
编辑2:
如果上下文不清楚,我对HTML感兴趣,而不对XHTML/XML感兴趣。空白在HTML中确实具有一些重要的重要规则,但是这些规则是在呈现器中实现的,而不是在解析器中实现的。我了解到这一点,正如我在最初的帖子中所证明的那样。我的问题是,是否有人在以DOM级别而非渲染级别运行的库中实现了HTML渲染器的空白逻辑?
最佳答案
我碰到了这个library。
可以通过pip安装:
pip install htmlmin
它的用法如下:
from htmlmin import minify
html=u"<html><body><p> Hello World </p></body></html>"
minified_html = minify(html)
print minified_html
哪个返回:
<html><body><p> Hello World </p></body></html>
我以为它可以满足您的需求,但是正如您所看到的,保留了一些无关的空间。
关于python - 如何删除lxml.html中无关紧要的空格?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18502410/