>>> from env_helper import info; info()
页面更新时间: 2022-12-22 21:58:16
运行环境:
    Linux发行版本: Debian GNU/Linux 11 (bullseye)
    操作系统内核: Linux-5.10.0-20-amd64-x86_64-with-glibc2.31
    Python版本: 3.9.2

4.4. HTML 基础知识

在你拆解网页之前,需要学习一些 HTML 的基本知识。 你也会看到如何利用Web浏览器的强大开发者工具, 它们使得从Web抓取信息更容易。

超文本标记语言(HTML)是编写Web页面的格式。 本章假定你对HTML有一些基本经验,但如果你需要 初学者指南,我推荐以下站点:

4.4.1. 快速复习

假定你有一段时间没有看过 HTML 了,这里是对基本知识的快速复习。 HTML文件是一个纯文本文件,带有 .html 文件扩展名。 这种文件中的文本被“标签”环绕,标签是尖括号包围的单词。标签告诉浏览器以怎样的格式显示该页面。 一个开始标签和一个结束标签可以包围某段文本,形成一个“元素”。 “文本”(或“内部的HTML”)是在开始标签和结束标签之间的内容。

开始标签 <strong> 表明,标签包围的文本将使用粗体。 结束标签 </strong> 告诉浏览器,粗体文本到此结束。

HTML中有许多不同的标签。有一些标签具有额外的特性, 在尖括号内以“属性”的方式展现。例如,<a>标签包含 一段文本,它应该是一个链接。这段文本链接的URL是 由href属性确定的。下面是一个例子:

Al's free <a href="http://inventwithpython.com">Python books</a>.

这段 HTML 在浏览器中看起来如图11-2所示。

某些元素具有 id 属性,可以用来在页面上唯一地确定该元素。 你常常会告诉程序,根据元素的 id 属性来寻找它。所以利用 浏览器的开发者工具,弄清楚元素的 id属性,这是编写 Web 抓取程序常见的任务。

4.4.2. 查看网页的 HTML 源代码

对于程序要处理的网页,你需要查看它的 HTML 源代码。要做到这一点, 在浏览器的任意网页上点击右键(或在OS X上Ctrl-点击),选择View SourceView page source,查看该页的HTML文本(参见图11-3)。 这是浏览器实际接收到的文本。浏览器知道如何通过这个HTML 显示或渲染网页。

我强烈建议你查看一些自己喜欢的网站的HTML源代码。 在查看源代码时,如果你不能完全理解,也没有关系。 你不需要完全掌握HTML,也能编写简单的Web抓取程序, 毕竟你不是要编写自己的网站。只需要足够的知识, 就能从已有的网站中挑选数据。

4.4.3. 打开浏览器的开发者工具

除了查看网页的源代码,你还可以利用浏览器的开发者工具, 来检查页面的HTML 。在Windows版的Chrome和IE中, 开发者工具已经安装了。可以按下F12,让它们出现(参见图11-4)。 再次按下F12,可以让开发者工具消失。在Chrome中, 也可以选择 View→Developer→Developer Tools, 调出开发者工具。在 OS X中按下⌘-option-I, 将打开 Chrome 的开发者工具。

对于 Firefox ,可以在Windows和Linux中需要按下Ctrl-Shifl-C, 或在OS X中按下⌘-option-C,调出开发者工具查看器。 它的布局几乎与Chrome的开发者工具一样。

在 Safari 中,打开 Preferences 窗口,并在 Advanced pane 选中 Show Develop menu in the menu bar选项。在它启用后,你可以按下耗-option-I, 调出开发者工具。

在浏览器中启用或安装了开发者工具之后,可以在网页中任何部分点击右键, 在弹出菜单中选择 Inspect Element,查看页面中这一部分对应的HTML。 如果需要在Web抓取程序中解析HTML,这很有帮助。

不要用正则表达式来解析 HTML

在一个字符串中定位特定的一段 HTML,这似乎很适合使用正则表达式。 但是,我建议你不要这么做。HTML的格式可以有许多不同的方式, 并且仍然被认为是有效的HTML,但尝试用正则表达式来捕捉所有 这些可能的变化,将非常繁琐,并且容易出错。 专门用于解析 HTML 的模块,诸如 Beautiful Soup ,将更不容易导致缺陷。 在 http:stackoverflow.com/a/1732454/1893164/, 你会看至更充分的讨论,了解为什么不应该用正则表达式来解析 HTML。

4.4.4. 使用开发者工具来寻找 HTML 元素

程序利用 requests 模块下载了一个网页之后, 你会得到该页的 HTML 内容,作为一个字符串值。 现在你需要弄清楚,这段 HTML 的哪个部分对应于网页上你感兴趣的信息。

这就是可以利用浏览器的开发者工具的地方。 假定你需要编写一个程序,从 http://weather.gov/ 获取天气预报数据。在写代码之前,先做一点调查。 如果你访问该网站,并查找邮政编码94105, 该网站将打开一个页面,显示该地区的天气预报。

如果你想抓取那个邮政编码对应的气温信息,怎么办? 右键点击它在页面的位置(或在OSX上用Control-点击), 在弹出的菜单中选择Inspect Element。这将打开 开发者工具窗口,其中显示产生这部分网页的 HTML 。

通过开发者工具,可以看到网页中负责气温部分的 HTML 是 <p class ="myforecast-current-lrg">57°F</p> 。 这正是你要找的东西!看起来气温信息包含在一个 <p> 元素中,带有 myforecast-current-lrg 类。 既然你知道了要找的是什么, BeautiflilSoup 模块就可以帮助你在这个字符串中找到它。