BeautifulSoup解析器lxml、html5lib和默认解析器区别

warning: 这篇文章距离上次修改已过901天,其中的内容可能已经有所变动。

使用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读取,对中文网站解析不友好

解析结果对比 html5lib (左) lxml(右)

请输入图片描述请输入图片描述

none
最后修改于:2021年10月31日 10:17

添加新评论