19.3. htmllib — HTML 文档解析器 — Python 文档
19.3. htmllib — HTML 文档解析器
自 2.6 版起已弃用:htmllib 模块已在 Python 3 中删除。 在 Python 2 中使用 HTMLParser,而在 Python 3 中使用等效的 html.parser
。
该模块定义了一个类,该类可以作为解析超文本标记语言 (HTML) 格式的文本文件的基础。 该类不直接与 I/O 相关——它必须通过方法以字符串形式提供输入,并调用“格式化程序”对象的方法以产生输出。 HTMLParser 类旨在用作其他类的基类以添加功能,并允许扩展或覆盖其大部分方法。 反过来,这个类派生自并扩展了模块 sgmllib 中定义的 SGMLParser
类。 HTMLParser 实现支持 HTML 2.0 语言,如 RFC 1866 中所述。 formatter 模块中提供了两种格式化程序对象的实现; 有关格式化程序接口的信息,请参阅该模块的文档。
下面总结了sgmllib.SGMLParser定义的接口:
向实例提供数据的接口是通过
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()
的方法。 解析器会在适当的时候调用这些:start_tag()
或do_tag()
在遇到<tag ...>
形式的开始标记时调用;end_tag()
在遇到<tag>
形式的结束标记时被调用。 如果一个开始标签需要一个相应的结束标签,比如<H1>
...</H1>
,类应该定义start_tag()
方法; 如果一个标签不需要结束标签,比如<P>
,类应该定义do_tag()
方法。
该模块定义了一个解析器类和一个异常:
- class htmllib.HTMLParser(formatter)
- 这是基本的 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 版中的新功能。
也可以看看
- 模块 格式化程序
- 用于将格式化事件的抽象流转换为写入器对象上的特定输出事件的接口定义。
- 模块 HTMLParser
- 替代的 HTML 解析器,它提供了一个稍微低级的输入视图,但旨在与 XHTML 一起使用,并且不实现一些在“已部署的 HTML”中未使用且对 XHTML 不合法的 SGML 语法。
- 模块 htmlentitydefs
- XHTML 1.0 实体的替换文本定义。
- 模块 sgmllib
- HTMLParser 的基类。
19.3.1. HTMLParser 对象
除了标签方法之外,HTMLParser 类还提供了一些额外的方法和实例变量以供在标签方法中使用。
- HTMLParser.formatter
- 这是与解析器关联的格式化程序实例。
- HTMLParser.nofill
- 布尔标志,当空白不应折叠时应为真,应为假。 一般来说,只有当字符数据被视为“预格式化”文本时,这才应该是正确的,如在
<PRE>
元素中。 默认值为假。 这会影响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()
- 开始将字符数据保存在缓冲区中,而不是将其发送到格式化程序对象。 通过 save_end() 检索存储的数据。 不能嵌套使用 save_bgn() / save_end() 对。
- HTMLParser.save_end()
- 结束缓冲字符数据并返回自上次调用 save_bgn() 以来保存的所有数据。 如果 nofill 标志为 false,则空格将折叠为单个空格。 在没有事先调用 save_bgn() 的情况下调用此方法将引发
TypeError
异常。
19.4. htmlentitydefs — HTML 通用实体的定义
源代码: :source:`Lib/htmlentitydefs.py`
该模块定义了三个字典,name2codepoint
、codepoint2name
和 entitydefs
。 entitydefs
被 htmllib 模块用来提供 HTMLParser 类的 entitydefs 属性。 此处提供的定义包含 XHTML 1.0 定义的所有实体,这些实体可以使用 Latin-1 字符集 (ISO-8859-1) 中的简单文本替换进行处理。
- htmlentitydefs.entitydefs
- 将 XHTML 1.0 实体定义映射到 ISO Latin-1 中的替换文本的字典。
- htmlentitydefs.name2codepoint
将 HTML 实体名称映射到 Unicode 代码点的字典。
2.3 版中的新功能。
- htmlentitydefs.codepoint2name
将 Unicode 代码点映射到 HTML 实体名称的字典。
2.3 版中的新功能。