python - 如果之前有换行符,则截断树
问题描述
我有一个来自某个站点的页面,lxml 在这里表现得很奇怪。
Python 3.6.5 (default, Jun 3 2018, 00:45:25)
[GCC 6.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from lxml import etree
>>> with open('1.html', newline='') as fi: text=fi.read()
>>> etree.LXML_VERSION
(4, 2, 5, 0)
>>> text[:100]
'\n<!DOCTYPE html>\n<html lang="en-US">\n<head id="ctl00_header"><meta http-equiv="X-UA-Compatible" cont'
>>> len(etree.tostring(etree.HTML(text[1:])))
455129
>>> len(etree.tostring(etree.HTML(text)))
201176
>>> etree.tostring(etree.HTML(text))[-150:]
b'ors\', \'brand\': \'Omron\', \'variant"/></div</td></tr></table></div></td></tr></table></div></div></div></div></form></body></html>'
在这种情况下,解析似乎突然停止在 attr 中间(它是 onclick)。我知道每个人都说 DOCTYPE 必须是第一行,但我认为 lxml 的这种行为(或下面的东西,我没有测试过)令人困惑。所以在提交错误之前,也许有人知道这是怎么回事?
更新:这更有趣。另一页。
(Pdb) p text[:20]
'\n<!DOCTYPE html>\n<ht'
(Pdb) p text[-20:]
'pt>\n</body>\n</html>\n'
(Pdb) len(etree.tostring(etree.HTML(text)))
316031
(Pdb) len(etree.tostring(etree.HTML(text.lstrip())))
259909
(Pdb) len(etree.tostring(etree.HTML(text.rstrip())))
316031
(Pdb) len(etree.tostring(etree.HTML(text.strip())))
259909
(Pdb) len(etree.tostring(etree.HTML(text.encode())))
316023
解决方案
推荐阅读
- python-3.x - Setup.py 以不同的顶级名称安装包
- css - 显示:Flex 不会根据 flex 项目内的内容灵活地调整 flex 项目的高度
- python - Python dns.resolver.resolve 用户输入函数
- azure-devops - 有没有办法为 Azure Devops 的 yaml 管道中的任务动态分配名称?
- c++ - 操作员创建这个二维节点数组有问题吗?
- flutter - Flutter:YouTube 播放器改变屏幕方向,我们如何在 YouTube 应用中打开视频?编辑#2
- scipy - 在 Scipy 中,如何检查 2 个稀疏矩阵之间的差异?
- node.js - VScode 节点调试器抛出 Uncaught Error: write EPIPE
- delphi - 如何在 DWScipt 中初始化对象?
- r - R 正则表达式列出不以例如“AA”或“BB”开头的文件