为什么 cssselect 不能与 html5parser 一起使用?
Why doesn't cssselect work with html5parser?
我试图在 lxml
解析的某些 HTML 页面上使用 cssselect
,但我发现只有一个解析器给出了预期的结果:
这很好用:
lxml.html.fromstring("...").cssselect("div.foo")
这个returns没有结果:
lxml.html.html5parser.fromstring("...").cssselect("div.foo")
有什么区别?我可以让 cssselect 与 html5parser
一起使用吗?
原因请看这两个答案:
简而言之,原因是来自 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))
我试图在 lxml
解析的某些 HTML 页面上使用 cssselect
,但我发现只有一个解析器给出了预期的结果:
这很好用:
lxml.html.fromstring("...").cssselect("div.foo")
这个returns没有结果:
lxml.html.html5parser.fromstring("...").cssselect("div.foo")
有什么区别?我可以让 cssselect 与 html5parser
一起使用吗?
原因请看这两个答案:
简而言之,原因是来自 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))