On this page
19.3. htmllib — HTML 文档的解析器
从 2.6 版开始不推荐使用:Python 3 中删除了htmllib模块。在 Python 2 中使用了HTMLParser,在 Python 3 中等效了html.parser
。
该模块定义了一个类,该类可以用作解析以超文本标记语言(HTML)格式化的文本文件的基础。该类与 I/O 没有直接关系,它必须pass方法以字符串形式提供 Importing,并调用“格式器”对象的方法以产生输出。 HTMLParser类旨在用作其他类的 Base Class,以添加Function,并允许其大多数方法被扩展或覆盖。反过来,此类也从模块sgmllib中定义的SGMLParser
类派生并扩展。 HTMLParser实现支持 RFC 1866中描述的 HTML 2.0 语言。 formatter模块中提供了格式化程序对象的两种实现。有关格式化程序接口的信息,请参阅该模块的文档。
以下是sgmllib.SGMLParser定义的接口的摘要:
- 将数据馈送到实例的接口是pass
feed()
方法实现的,该方法带有一个字符串参数。可以根据需要一次或多或少地调用它。p.feed(a); p.feed(b)
与p.feed(a+b)
具有相同的效果。当数据包含完整的 HTML 标记构造时,将立即对其进行处理。不完整的构造将保存在缓冲区中。要强制处理所有未处理的数据,请调用close()
方法。
例如,要解析文件的全部内容,请使用:
parser.feed(open('myfile.html').read())
parser.close()
- 定义 HTML 标签语义的接口非常简单:派生一个类并定义名为
start_tag()
,end_tag()
或do_tag()
的方法。解析器将在适当的时候调用它们:当遇到<tag ...>
形式的开始标记时,调用start_tag()
或do_tag()
;否则,将调用start_tag()
或do_tag()
。当遇到格式为<tag>
的结束标记时,将调用end_tag()
。如果一个开始标记需要一个相应的结束标记,例如<H1>
…</H1>
,则该类应定义start_tag()
方法;如果标记不需要结束标记(例如<P>
),则该类应定义do_tag()
方法。
该模块定义了一个解析器类和一个异常:
类别
htmllib.
HTMLParser
(格式器)- 这是基本的 HTML 解析器类。它支持 XHTML 1.0 Recommendation(https://www.w3.org/TR/xhtml1)要求的所有实体名称。它还为所有 HTML 2.0 以及许多 HTML 3.0 和 3.2 元素定义了处理程序。
exception
htmllib.
HTMLParseError
- HTMLParser类在解析时遇到错误时引发的异常。
2.4 版的新Function。
See also
Module formatter
接口定义,用于将格式化事件的抽象流转换为写入器对象上的特定输出事件。
Module HTMLParser
备用 HTML 解析器,它提供 Importing 的较低层视图,但旨在与 XHTML 一起使用,并且未实现一些“在部署的 HTML 中不使用的” SGML 语法,并且对于 XHTML 而言是不合法的。
Module htmlentitydefs
XHTML 1.0 实体的替换文本的定义。
Module sgmllib
HTMLParser的 Base Class。
19.3.1. HTMLParser 对象
除了标记方法外,HTMLParser类还提供了一些其他方法和实例变量以供在标记方法中使用。
HTMLParser.
formatter
- 这是与解析器关联的格式化程序实例。
HTMLParser.
nofill
- 布尔标志,当不应该折叠空格时应为 true,否则应为 false。通常,仅当字符数据被视为“预格式化”文本(如
<PRE>
元素内)时,才应为 true。默认值为 false。这会影响handle_data()
和save_end()的操作。
- 布尔标志,当不应该折叠空格时应为 true,否则应为 false。通常,仅当字符数据被视为“预格式化”文本(如
HTMLParser.
anchor_bgn
(* href , name , type *)- 在锚点区域的开头调用此方法。参数与具有相同名称的
<A>
标签的属性相对应。默认实现在文档中维护一个超链接列表(由<A>
标签的HREF
属性定义)。超链接列表可用作数据属性anchorlist
。
- 在锚点区域的开头调用此方法。参数与具有相同名称的
HTMLParser.
anchor_end
( )- 在锚点区域的末尾调用此方法。默认实现是使用索引将文本脚注标记添加到anchor_bgn()创建的超链接列表中。
HTMLParser.
handle_image
(* source , alt * [,* ismap * [,* align * [,* width * [,* height *]]]])- 调用此方法来处理图像。默认实现只是将* alt *值传递给
handle_data()
方法。
- 调用此方法来处理图像。默认实现只是将* alt *值传递给
HTMLParser.
save_bgn
( )- 开始将字符数据保存在缓冲区中,而不是将其发送到格式化程序对象。passsave_end()检索存储的数据。不能嵌套使用save_bgn()/save_end()对。
HTMLParser.
save_end
( )- 结束缓冲字符数据并返回自上次调用save_bgn()以来保存的所有数据。如果nofill标志为 false,则空白将折叠为单个空格。调用此方法而没有先调用save_bgn()将引发TypeError异常。
19.4. htmlentitydefs — HTML 通用实体的定义
Note
htmlentitydefs模块在 Python 3 中已重命名为html.entities
。2to3工具在将源转换为 Python 3 时将自动适应导入。
该模块定义了三个字典name2codepoint
,codepoint2name
和entitydefs
。 htmllib模块使用entitydefs
来提供HTMLParser类的entitydefs属性。此处提供的定义包含 XHTML 1.0 定义的所有实体,可以使用 Latin-1 字符集(ISO-8859-1)中的简单文本替换来处理这些实体。
htmlentitydefs.
entitydefs
- 字典,将 XHTML 1.0 实体定义 Map 到 ISO Latin-1 中的替换文本。
htmlentitydefs.
name2codepoint
- 将 HTML 实体名称 Map 到 Unicode 代码点的字典。
2.3 版的新Function。
htmlentitydefs.
codepoint2name
- 将 Unicode 代码点 Map 到 HTML 实体名称的字典。
2.3 版的新Function。