我正在尝试在cssselect
所解析的某些HTML页面上使用lxml
,但是我发现只有一个解析器可以提供预期的结果:
这很好用:
lxml.html.fromstring("...").cssselect("div.foo")
这不会返回任何结果:
lxml.html.html5parser.fromstring("...").cssselect("div.foo")
有什么区别?我可以让cssselect与html5parser
一起使用吗?
答案 0 :(得分:1)
请查看有关原因的以下两个答案:
How to remove namespace value from inside lxml.html.html5paser element tag
lxml html5parser ignores "namespaceHTMLElements=False" option
简而言之,原因是来自html5lib
的解析将名称空间html
添加到元素树,而其他解析则没有。
从lxml
方面来说,我认为这应该是一个错误,也许...要解决此问题:
import lxml.html.html5parser
from html5lib import HTMLParser
from html5lib.treebuilders.etree_lxml import TreeBuilder
parser = HTMLParser(tree=TreeBuilder, namespaceHTMLElements=False)
print(lxml.html.html5parser.fromstring("<div class=\"foo\"></div>", parser=parser))