使用lxml.html
时出现意外输出。
import lxml.html as LH
xmlspec = "<?xml version='1.0' encoding='iso-8859-1'?>"
a = LH.fromstring(xmlspec + "<html><body><p>Body</p></body></html>")
b = LH.fromstring(xmlspec + "<html><meta /><body><p>Body</p></body></html>")
print a # says element p while I would have expected html
print b # says element html which is expected
有人可以解释为什么会这样吗?删除xml
规范后,一切正常!有解决这个问题的正确方法吗?
答案 0 :(得分:2)
经过20多分钟的研究,我得出的结论是:
<?xml version='1.0' encoding='iso-8859-1'?><html><body><p>Body</p></body></html>
不是有效的HTML,而是有效的XML。
从技术上讲
<?xml version='1.0' encoding='iso-8859-1'?><html><meta /><body><p>Body</p></body</html>
也是无效的HTML,但是lxml可以接受。更加可接受的兼容版本是在<head><meta /></head>
之后添加<html>
,这虽然更好,但仍然不是很好(要成为有效的HTML,它需要在{{ 1}},当然还有其他文档类型。
参考文献: