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定义的接口的摘要:

  • 将数据馈送到实例的接口是passfeed()方法实现的,该方法带有一个字符串参数。可以根据需要一次或多或少地调用它。 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()的操作。
  • 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()方法。
  • 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.entities2to3工具在将源转换为 Python 3 时将自动适应导入。

源代码: Lib/htmlentitydefs.py


该模块定义了三个字典name2codepointcodepoint2nameentitydefshtmllib模块使用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。