跳转到主要内容

基于WHATWG HTML规范的HTML解析器

项目描述

html5lib

https://github.com/html5lib/html5lib-python/actions/workflows/python-tox.yml/badge.svg

html5lib是一个纯Python库,用于解析HTML。它设计用于符合WHATWG HTML规范,这与所有主要网络浏览器的实现一致。

用法

简单用法遵循以下模式

import html5lib
with open("mydocument.html", "rb") as f:
    document = html5lib.parse(f)

或者

import html5lib
document = html5lib.parse("<p>Hello World!")

默认情况下,document 将是一个 xml.etree 元素实例。在可能的情况下,html5lib会选择加速的 ElementTree 实现。

还支持两种其他树类型:xml.dom.minidomlxml.etree。要使用替代格式,指定树构建器的名称

import html5lib
with open("mydocument.html", "rb") as f:
    lxml_etree_document = html5lib.parse(f, treebuilder="lxml")

在使用 urllib.request (Python 3) 时,应将HTTP中的字符集传递给html5lib,如下所示

from urllib.request import urlopen
import html5lib

with urlopen("http://example.com/") as f:
    document = html5lib.parse(f, transport_encoding=f.info().get_content_charset())

要更多地控制解析器,可以显式创建解析器对象。例如,要使解析器在解析错误时抛出异常,请使用

import html5lib
with open("mydocument.html", "rb") as f:
    parser = html5lib.HTMLParser(strict=True)
    document = parser.parse(f)

当您显式实例化解析器对象时,将树构建器类作为tree关键字参数传递,以使用替代文档格式

import html5lib
parser = html5lib.HTMLParser(tree=html5lib.getTreeBuilder("dom"))
minidom_document = parser.parse("<p>Hello World!")

更多文档可在https://html5lib.readthedocs.io/找到。

安装

html5lib支持CPython 3.8+和PyPy。要安装

$ pip install html5lib

目标是支持pip支持的版本的非严格超集。

可选依赖

以下第三方库可用于额外功能

  • lxml作为树格式(用于构建和遍历)在CPython中得到支持(但在PyPy中不支持,因为它已知会导致段错误);

  • genshi有一个树遍历器(但没有构建器);

  • chardet在无法确定字符编码时可以作为后备使用。

错误

请将任何错误报告在问题追踪器上。

测试

单元测试需要pytestmock库,可以在根目录中使用pytest命令运行。

测试数据包含在单独的html5lib-tests仓库中,并作为子模块包含,因此对于git检查,必须初始化

$ git submodule init
$ git submodule update

如果您在系统上提供了所有兼容的Python实现,您可以使用PyPI上可找到的tox实用工具在它们上面运行测试。

有问题?

查看文档。仍需要帮助?前往我们的GitHub论坛

您还可以浏览html5lib-discuss邮件列表的存档。

致谢

html5lib由以下人员编写和维护:

  • James Graham

  • Sam Sneddon

  • Łukasz Langa

  • Will Kahn-Greene

补丁和建议

(按时间顺序,按首次提交:)

  • Anne van Kesteren

  • Lachlan Hunt

  • lantis63

  • Sam Ruby

  • Thomas Broyer

  • Tim Fletcher

  • Mark Pilgrim

  • Ryan King

  • Philip Taylor

  • Edward Z. Yang

  • fantasai

  • Philip Jägenstedt

  • Ms2ger

  • Mohammad Taha Jahangir

  • Andy Wingo

  • Andreas Madsack

  • Karim Valiev

  • Juan Carlos Garcia Segovia

  • Mike West

  • Marc DM

  • Simon Sapin

  • Michael[tm] Smith

  • Ritwik Gupta

  • Marc Abramowitz

  • Tony Lopes

  • lilbludevil

  • Kevin

  • Drew Hubl

  • Austin Kumbera

  • Jim Baker

  • Jon Dufresne

  • Donald Stufft

  • Alex Gaynor

  • Nik Nyby

  • Jakub Wilk

  • Sigmund Cherem

  • Gabi Davar

  • Florian Mounier

  • neumond

  • Vitalik Verhovodov

  • Kovid Goyal

  • Adam Chainz

  • John Vandenberg

  • Eric Amorde

  • Benedikt Morbach

  • Jonathan Vanasco

  • Tom Most

  • Ville Skyttä

  • Hugo van Kemenade

  • Mark Vasilkov

HTML5Lib-modern

  • Ashley Sommer

项目详情


下载文件

下载适用于您平台的项目文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源码分发

html5lib_modern-1.2.tar.gz (275.2 kB 查看哈希值)

上传时间 源码

构建分发

html5lib_modern-1.2-py2.py3-none-any.whl (116.2 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持