Python中的 html5lib 和 lxml 解析器
Python编程中的解析意味着将一团文本分解成更小且有意义的部分。 这种分解取决于特定解析器定义的某些规则和因素。 这些解析器的范围可以从逐行解析的本机字符串方法到诸如 html5lib
,它可以解析 HTML 文档的几乎所有元素,将其分解为不同的标签和片段,可以针对各种用例过滤掉这些元素。
本文我们晓得博客为你介绍Python中的 html5lib 和 lxml 解析器的全部内容,在深入研究之前对这两个库进行概述。
Python中解析器
Html5lib 和 lxml 是一个 Python 库,可以轻松处理 XML 和 HTML 文件,也可用于网页抓取。有很多现成的 XML 解析器,但为了获得更好的结果,开发人员有时更喜欢编写自己的 XML 和 HTML 解析器。由于 html5lib
是一个纯 python 库,它具有外部 Python 依赖关系,而 lxml
某些 C 库的绑定具有外部 C 依赖关系。
lxml 安装:
pip install html5lib
html5lib: 一个 纯Python 库解析HTML。 它旨在符合 WHATWG HTML 规范,正如所有主要 Web 浏览器所实现的那样。
lxml: C 库的成熟的 Pythonic 绑定 libxml2
和 libxslt
. 它的独特之处在于它将这些库的速度和 XML 功能完整性与原生 Python API 的简单性相结合,大部分兼容但优于众所周知的 ElementTree
火。
lxml 安装:
pip install lxml
优点和缺点
html5lib:
- 实现受当前浏览器严重影响的 HTML5 解析算法,这意味着您获得的解析文本与在浏览器上完成的解析文本相同。
- 由于它使用 HTML5 解析算法,它甚至修复了许多损坏的 HTML 并添加了几个缺失的标签,以完成文本并使其看起来像 HTML 文档。
- 极其宽容。
- 非常慢。 为什么? 因为它得到了大量 Python 的支持 代码 。
lxml:
- 非常快。 为什么? 因为它得到了大量 的支持 Cython 代码 。
- 修复了一些损坏的 HTML,但不足以像完整的 HTML 文档一样呈现它。
- 相当宽容。
在Beautifulsoup中使用的区别
只是为了突出两个解析器在它们如何工作和制作树以修复未完美形成的文档方面的区别,我们将采用相同的示例并将其提供给两个解析器。
<li></p>
from bs4 import BeautifulSoup
soup_html5lib = BeautifulSoup("<li></p>", "html5lib")
print(soup_html5lib)
输出:
<html><head></head><body><li><p></p></li></body></html>
我们发现了什么:
- 打开和关闭
html
标签。 - 打开和关闭
head
标签(空)。 - 打开和关闭
body
标签。 - 支持打开关闭
p
标签 - 支持打开关闭
li
标签。 - Beautiful soup对象的最终文本中没有删除标签。
lxml
:
from bs4 import BeautifulSoup
soup_lxml = BeautifulSoup("<li></p>", "lxml")
print(soup_lxml)
输出:
<html><body><li></li></body></html>
我们发现了什么:
- 打开和关闭
html
标签。 - 不包含
head
标签。 - 打开和关闭
body
标签。 - 收盘
li
支持打开的标签li
标签。 - 没有
p
标签。
总结
以上是晓得博客为你介绍的Python中的 html5lib 和 lxml 解析器的全部内容,可以很容易观察两个库在文档的解析方面的差异。
Claude、Netflix、Midjourney、ChatGPT Plus、PS、Disney、Youtube、Office 365、多邻国Plus账号购买,ChatGPT API购买,优惠码XDBK,用户购买的时候输入优惠码可以打95折