BeautifulSoup解析器lxml、html5lib和默认解析器区别
warning:
这篇文章距离上次修改已过1117天,其中的内容可能已经有所变动。
使用BeautifulSoup 解析网页学简笔画网chengyu/19601.html, 发现常用的lxml解析器解析缺失<div class="footer">内容, 决定一探究竟,记录下结论
lxml
- 解析器速度最快, 能默认处理类似
<a></b>
这类错误,自动识别为<a></a>
- 对于简单的不正确闭合能自动纠正,稍微复杂的闭合错误会出现解析失败内容缺失的情况,复杂情况未正确闭合内容会默认剔除
- lxml会读取meta中的charset编码类型,自动转换为utf-8,当设置编码与实际编码不一致也会导致内容缺失,如指定了编码
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
, 实际内容非gb2312编码,遇到汉字字符解析失败,内容就只有前几行兼容ascii编码内容
hmtl5lib
- 安装
pip3 install html5lib
- 对未正确关闭标签,有较好的兼容性
- 对charset不符实际编码会按指定编码强制转换,与lxml省略不一样
默认html.parser
- 解析速度不如前两者
- 不自动不全<head></head> 基本Doc 元素
- 不识别 meta编码,统一按utf-8读取,对中文网站解析不友好