程序员的知识教程库

网站首页 > 教程分享 正文

python3从零学习-5.9.1、html—超文本标记语言支持

henian88 2024-09-02 16:29:42 教程分享 4 ℃ 0 评论

源码: Lib/html/__init__.py

该模块定义了操作HTML的工具。

  • html.escape(s, quote=True)

将字符串 s 中的字符``&`` 、 < 和 > 转换为安全的HTML序列。 如果需要在 HTML 中显示可能包含此类字符的文本,请使用此选项。 如果可选的标志 quote 为真值,则字符 (") 和 (') 也被转换;这有助于包含在由引号分隔的 HTML 属性中,如 <a href="...">。

  • html.unescape(s)

将字符串 s 中的所有命名和数字字符引用 (例如 >, >, >) 转换为相应的Unicode字符。 此函数使用HTML 5标准为有效和无效字符引用定义的规则,以及 HTML 5 命名字符引用列表。

html 包中的子模块是:

html.parser —— 具有宽松解析模式的HTML / XHTML解析器

html.entities – HTML 实体定义


源代码: Lib/html/parser.py


这个模块定义了一个 HTMLParser 类,为 HTML(超文本标记语言)和 XHTML 文本文件解析提供基础。


class html.parser.HTMLParser(*, convert_charrefs=True)

创建一个能解析无效标记的解析器实例。


如果 convert_charrefs 为 True (默认值),则所有字符引用( script/style 元素中的除外)都会自动转换为相应的 Unicode 字符。


一个 HTMLParser 类的实例用来接受 HTML 数据,并在标记开始、标记结束、文本、注释和其他元素标记出现的时候调用对应的方法。要实现具体的行为,请使用 HTMLParser 的子类并重载其方法。


这个解析器不检查结束标记是否与开始标记匹配,也不会因外层元素完毕而隐式关闭了的元素引发结束标记处理。

HTMLParser 实例有下列方法:


  • HTMLParser.feed(data)

填充一些文本到解析器中。如果包含完整的元素,则被处理;如果数据不完整,将被缓冲直到更多的数据被填充,或者 close() 被调用。data 必须为 str 类型。


  • HTMLParser.close()

如同后面跟着一个文件结束标记一样,强制处理所有缓冲数据。这个方法能被派生类重新定义,用于在输入的末尾定义附加处理,但是重定义的版本应当始终调用基类 HTMLParser 的 close() 方法。


  • HTMLParser.reset()

重置实例。丢失所有未处理的数据。在实例化阶段被隐式调用。


  • HTMLParser.getpos()

返回当前行号和偏移值。


  • HTMLParser.get_starttag_text()

返回最近打开的开始标记中的文本。 结构化处理时通常应该不需要这个,但在处理“已部署”的 HTML 或是在以最小改变来重新生成输入时可能会有用处(例如可以保留属性间的空格等)。


下列方法将在遇到数据或者标记元素的时候被调用。他们需要在子类中重载。基类的实现中没有任何实际操作(除了 handle_startendtag() ):


  • HTMLParser.handle_starttag(tag, attrs)

这个方法在标签开始的时候被调用(例如: <div id="main"> )。


tag 参数是小写的标记名。attrs 参数是一个 (name, value) 形式的列表,包含了所有在标记的 <> 括号中找到的属性。name 转换为小写,value 的引号被去除,字符和实体引用都会被替换。


实例中,对于标签 <A HREF="https://www.cwi.nl/">,这个方法将以下列形式被调用 handle_starttag('a', [('href', 'https://www.cwi.nl/')]) 。


html.entities 中的所有实体引用,会被替换为属性值。


  • HTMLParser.handle_endtag(tag)

此方法被用来处理元素的结束标记(例如: </div> )。


tag 参数是小写的标签名。


  • HTMLParser.handle_startendtag(tag, attrs)

类似于 handle_starttag(), 只是在解析器遇到 XHTML 样式的空标记时被调用( <img ... />)。这个方法能被需要这种特殊词法信息的子类重载;默认实现仅简单调用 handle_starttag() 和 handle_endtag() 。


  • HTMLParser.handle_data(data)

这个方法被用来处理任意数据(例如:文本节点和 <script>...</script> 以及 <style>...</style> 中的内容)。


  • HTMLParser.handle_entityref(name)

这个方法被用于处理 &name; 形式的命名字符引用(例如 >),其中 name 是通用的实体引用(例如: 'gt')。如果 convert_charrefs 为 True,该方法永远不会被调用。


  • HTMLParser.handle_charref(name)

这个方法被用来处理 &#NNN; 和 &#xNNN; 形式的十进制和十六进制字符引用。例如,> 等效的十进制形式为 > ,而十六进制形式为 > ;在这种情况下,方法将收到 '62' 或 'x3E' 。如果 convert_charrefs 为 True ,则该方法永远不会被调用。


  • HTMLParser.handle_comment(data)

这个方法在遇到注释的时候被调用(例如: <!--comment--> )。


例如, <!-- comment --> 这个注释会用 ' comment ' 作为参数调用此方法。


Internet Explorer 条件注释(condcoms)的内容也被发送到这个方法,因此,对于 <!--[if IE 9]>IE9-specific content<![endif]--> ,这个方法将接收到 '[if IE 9]>IE9-specific content<![endif]' 。


  • HTMLParser.handle_decl(decl)

这个方法用来处理 HTML doctype 申明(例如 <!DOCTYPE html> )。


decl 形参为 <!...> 标记中的所有内容(例如: 'DOCTYPE html' )。


  • HTMLParser.handle_pi(data)

此方法在遇到处理指令的时候被调用。data 形参将包含整个处理指令。例如,对于处理指令 <?proc color='red'> ,这个方法将以 handle_pi("proc color='red'") 形式被调用。它旨在被派生类重载;基类实现中无任何实际操作。


注解 HTMLParser 类使用 SGML 语法规则处理指令。使用 '?' 结尾的 XHTML 处理指令将导致 '?' 包含在 data 中。


  • HTMLParser.unknown_decl(data)

当解析器读到无法识别的声明时,此方法被调用。


data 形参为 <![...]> 标记中的所有内容。某些时候对派生类的重载很有用。基类实现中无任何实际操作。

源码: Lib/html/entities.py

该模块定义了四个词典, html5、 name2codepoint、 codepoint2name、以及 entitydefs。


  • html.entities.html5

将 HTML5 命名字符引用 1 映射到等效的 Unicode 字符的字典,例如 html5['gt;'] == '>'。 请注意,尾随的分号包含在名称中(例如 'gt;'),但是即使没有分号,一些名称也会被标准接受,在这种情况下,名称出现时带有和不带有 ';'。另见 html.unescape()。


  • html.entities.entitydefs

将 XHTML 1.0 实体定义映射到 ISO Latin-1 中的替换文本的字典。


  • html.entities.name2codepoint

将 HTML 实体名称映射到 Unicode 代码点的字典。


  • html.entities.codepoint2name

将 Unicode 代码点映射到 HTML 实体名称的字典。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表