lxml.html 以不同方式对待两个相似的输入?
lxml.html treats two similar inputs differently?
我在使用 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
规范后一切正常!有没有正确的处理方法?
根据短短 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 允许它。一个更可接受的兼容版本是在 <html>
之后添加 <head><meta /></head>
,这更好但仍然不是很好(要成为有效的 HTML 它需要有一个 <title>
在 <head>
里面,当然还有不同的文档类型)。
参考文献:
我在使用 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
规范后一切正常!有没有正确的处理方法?
根据短短 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 允许它。一个更可接受的兼容版本是在 <html>
之后添加 <head><meta /></head>
,这更好但仍然不是很好(要成为有效的 HTML 它需要有一个 <title>
在 <head>
里面,当然还有不同的文档类型)。
参考文献: