第 22 章 结构化文本 结构化文本:HTML
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
网络上的大多数文档都使用 HTML(超文本标记语言)。标记是指在文本文档中插入特殊标记(称为 标记),使文本结构化。从理论上讲,HTML 是 SGML( 标准通用标记语言)这一大型通用标准的应用。实际上,网络上的许多文档都以粗略或不正确的方式使用 HTML。
HTML 是为在浏览器中显示文档而设计的。随着网络内容的发展,用户意识到它缺乏 语义标记的能力,在这种情况下,标记表示的是划定文本的含义,而不仅仅是其外观。完全、精确地提取 HTML 文档中的信息往往被证明是不可行的。一种名为 XHTML 的更严格标准试图弥补这些缺陷。XHTML 类似于传统的 HTML,但它是用 XML(可扩展标记语言)定义的,比 HTML 更精确。你可以使用第 23 章中介绍的工具来处理格式良好的 XHTML。不过,截至目前,XHTML 并未取得压倒性的成功,反而被更实用的 HTML5 所取代。
尽管困难重重,但从 HTML 文档中提取至少一些有用的信息(这项任务被称为 web scraping、spidering 或scraping)还是很有可能的。Python 的标准库试图提供帮助,它提供了html包,用于解析 HTML 文档,无论是为了展示文档,还是更常见的,作为试图从文档中提取信息的一部分。然而,当你处理的是有些破损的网页时(几乎总是这种情况!),第三方模块BeautifulSoup通常会给你带来最后、最好的希望。在本书中,出于实用的原因,我们主要介绍BeautifulSoup,而忽略了与之竞争的标准库模块。读者在寻找替代品时,还应该研究一下日益流行的scrapy软件包。
生成 HTML 和在 HTML 中嵌入 Python 也是相当频繁的任务。标准 Python 库不支持 HTML 生成或嵌入,但您可以使用 Python 字符串格式化,第三方模块也可以提供帮助。BeautifulSoup可以让您改变 HTML 树(因此,您可以通过编程,甚至 "从头开始",建立一个 HTML 树);另一种更可取的方法是模板化,例如,第三方模块jinja2 支持模板化,我们将在"The jinja2 Package "中介绍其基本要素。
HTML 实体模块
Python 标准库中的 html.entities模块提供了一些属性,它们都是映射(见表 22-1)。无论您使用哪种通用方法来解析、编辑或生成 HTML,它们都能派上用场,包括下一节介绍的BeautifulSoup包。
| 代码点2名称 | 从 Unicode 代码点到 HTML 实体名称的映射。例如,entities.codepoint2name[228]为 "auml",因为 Unicode 字符 228,ä,"带重读的小写 a",在 HTML 中编码为"ä"。 |
| 实体定义 | 从 HTML 实体名称到等效 Unicode 单字符串的映射。例如,entities. entitydefs ['auml']为'ä',entities.entitydefs['sigma']为'σ'。 |
| html5 | HTML5 命名字符引用到等效单字符串的映射。例如,entities.html5['gt;']就是'>'。关键字中的尾部分号确实很重要--少数(但远非全部)HTML5 命名的字符引用可以选择拼写时不带尾部分号,在这种情况下,entities ... |
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access