Python lxml 模块

2025年3月17日 | 阅读 10 分钟

我们都一定听过网络爬虫以及如何使用网络爬虫从网站上抓取信息。网络爬虫非常重要,因为它能帮助我们从一个网页或网站获取所有有用的信息,并且我们可以从中获得任何我们想要的信息。现在,我们中的许多人可能会想,为什么我们首先要从网页获取信息,而不是直接访问网页来查看信息?使用网络爬虫过程主要有两个目的,如下:

  • 第一,当我们必须从一个网页查找某些特定信息时,如果直接从网页查找会花费大量时间。
  • 第二,使用网络爬虫过程可以非常容易地存储和收集来自任何网站的所有重要信息。

这是网络爬虫之所以重要以及我们为什么必须使用网络爬虫的两个重要原因。现在,当我们理解了网络爬虫在节省时间和获取所有有用信息方面的重要性时,我们都想学习如何使用网络爬虫。有多种方法可以实现和使用网络爬虫过程,并且在 Python 中也有多种实现网络爬虫过程的方法。

Python 提供了多种模块,使用这些模块;我们可以通过 Python 程序实现网络爬虫。其中一个 Python 模块就是 lxml 模块,它提供了多种函数库,通过这些库可以实现网络爬虫。在本教程中,我们将学习 Python lxml 模块,并了解如何使用此模块实现网络爬虫。

注意:我们应该注意到,在对任何网页或 Web 链接执行网络爬虫时,我们必须事先获得某些网站的许可;否则,将被视为非法。我们在实现网络爬虫时还应注意的一点是,向单个网站发送多个网络爬虫请求可能会导致该网站封禁。

Python 中的 lxml 模块

Python 的 lxml 模块是一个 XML 工具包,它基本上是以下两个 C 库的 Pythonic 绑定:libxlst 和 libxml2。lxml 模块是 Python 中一个非常独特和特殊的模块,因为它提供了 XML 功能和速度的结合。在 lxml 模块中,我们提供了多种函数,通过在 Python 程序中使用这些函数;我们可以轻松地执行网络爬虫并从任何网页中整理所有有用的信息。Python 的 lxml 模块还允许我们在网络爬虫过程中轻松处理所有 HTML 和 XML 文件。

以下是使用 Python 程序中的 lxml 模块可以执行的函数:

  • 我们可以使用 lxml 模块解析所有 XML 和 HTML 文档。
  • 我们甚至可以使用 Python 程序中的 etree 功能创建 XML 或 HTML 文档。
  • 在用 lxml 模块解析 HTML 或 XML 文档后,我们甚至可以执行多个操作并搜索或检索其中的特定信息。
  • 我们还可以使用 Python 程序中的 lxml 模块函数来实现网络爬虫。

在本教程中,我们只将学习 lxml 模块在网络爬虫中的实现以及如何使用该模块的函数来执行网络爬虫。

Python 中的 lxml 模块:安装

Python 的 lxml 模块不是内置的 Python 库,因此,如果我们想使用此模块通过 Python 程序实现网络爬虫,那么首先我们应该确保我们的系统上已安装 lxml 模块。如果我们的系统上未安装 lxml 模块,那么我们首先需要安装此模块,然后才能继续实现该模块的网络爬虫。

我们有多种安装方法可用于安装 lxml 模块,我们可以根据自己的选择使用其中任何一种方法,但在本节中,我们将仅使用 pip 安装程序方法来安装 lxml 模块。在 pip 安装方法中,首先,我们需要打开设备的 cmd 命令提示符终端,然后我们在终端中输入以下 pip 命令:

在终端中输入上述命令后,我们需要按 Enter 键启动安装过程。一旦我们按下 Enter 键,lxml 模块的安装过程就会开始,并且需要一段时间才能成功安装此模块。

Python lxml Module

正如我们所见,lxml 模块已成功安装在系统中,现在我们可以将其导入到我们的 Python 程序中,并借助其函数来实现网络爬虫过程。

注意:在我们继续使用 lxml 模块进行网络爬虫实现部分之前,我们应该注意到,在执行网络爬虫时,我们还需要另一个 Python 模块。如果我们想使用 lxml 模块进行网络爬虫,那么我们的系统中除了 lxml 模块外,还需要安装 Python requests 模块。这是因为 Python 的 requests 模块将向我们要执行网络爬虫的网站或网页发送请求。Python 的 requests 模块也不是内置模块,因此,我们应该确保我们的系统中也存在此模块。如果我们的系统中未安装 requests 模块,那么同样,我们可以使用 pip 安装程序来安装此模块。我们需要在 cmd 终端中输入以下命令:

输入命令后,我们需要按照过程操作,等待一段时间,直到 requests 模块的安装过程完成。

Python lxml Module

我们可以看到 Python Requests 模块已成功安装在我们的系统中,现在我们可以继续使用 lxml 模块实现网络爬虫部分。

Python 中的 lxml 模块:网络爬虫实现

在我们继续本节的实现部分之前,我们需要了解一些事情,之后我们才能继续进行网络爬虫的实现。

实现 lxml 模块网络爬虫的步骤

我们必须遵循分步过程来实现和使用网络爬虫,并使用此过程从网页中检索信息。以下是我们在使用 lxml 模块实现网络爬虫时必须遵循的步骤:

  • 步骤 1:首先,我们必须提供一个我们想在其上执行网络爬虫的 Web 链接,然后我们从发送的 Web 链接中获得响应。
  • 步骤 2:在获得发送的 Web 链接的响应后,我们必须将接收到的响应对象转换为字节字符串。
  • 步骤 3:接下来,我们必须将转换后的 Web 链接的字节字符串响应传递给 'fromstring' 方法(lxml 模块中 html 类的一个方法)。
  • 步骤 4:将响应字节字符串通过 'fromstring' 方法后,我们应该使用我们用于网络爬虫的 Web 链接的 xpath 来定位到特定的元素。
  • 步骤 5:在最后一步,我们已经通过 xpath 检索了网页上的内容,现在我们可以根据需要使用这些内容或信息,并且我们还可以将其保存以备将来使用。

这些是我们必须按顺序遵循的步骤,以从网页中检索特定内容。我们可以通过遵循上述步骤来实现网络爬虫并从任何 Web 链接中检索内容。

Web 链接的 xpath

在实现网络爬虫的步骤 4 和 5 中,我们可以找到 'xpath' 这个词,它对于成功实现网络爬虫非常重要。现在,我们中的许多人会问 'xpath' 是什么,以及如何获得 Web 链接的 xpath。我们将在本节中回答这两个问题。

xpath:xpath 使用非 XML 语法提供了一种灵活的寻址方式,代表 XML 路径语言,通过 xpath,我们可以指向给定 XML 文档(或网页)的不同部分。xpath 用于网络爬虫,以便程序可以寻址或唯一标识要检索的网页部分。xpath 是网络爬虫中的一个重要元素,因为 xpath 是程序中指定要从 Web 链接中检索内容的唯一元素。

现在,第二个问题是如何为给定的链接获取 xpath,这个问题的答案是,我们必须遵循以下步骤来获取 Web 链接的 xpath:

步骤 1:首先,我们必须访问我们想要在其上执行网络爬虫的 URL,然后右键单击,会弹出一个包含选项列表的窗口。右键单击 URL 页面后打开的窗口将如下所示:

Python lxml Module

步骤 2:我们必须从选项列表中选择“检查”选项,它会在同一 URL 页面上打开第二个窗口,我们可以在其中找到 URL 的代码及其所有元素。

步骤 3:现在,我们必须在此步骤中再次右键单击,但现在我们必须右键单击打开的元素窗口。当我们右键单击 div 元素时,将打开另一个包含选项列表的弹出窗口。右键单击检查页面窗口元素后打开的窗口将如下所示:

Python lxml Module

步骤 4:在此步骤中,我们必须转到复制选项,在那里我们会看到很多复制选项。当我们从选项列表中转到复制选项时,会出现以下选项列表:

Python lxml Module

我们必须选择“完整 xpath”选项,这样完整的 xpath 就会被复制,并且我们在网络爬虫过程中必须在我们的程序中使用此 xpath。

在获取我们在网络爬虫中使用的 URL 的 xpath 时,我们应该遵循这些步骤,并且我们应该注意到 xpath 是网络爬虫过程中的一个重要元素。

网络爬虫实现

当我们在 Python 程序中使用 lxml 模块来实现网络爬虫时,我们必须在执行程序之前固定许多事情,如下所示:

  • 我们要为其进行网络爬虫的目标网站或网页,
  • 我们要检索的信息等。

在程序中确定并固定这些事情之后,我们可以执行程序并通过 lxml 模块实现网络爬虫。

在本节中,我们将使用自定义 URL,然后通过获取其 xpath 来在自定义 URL(即新发布)上执行网络爬虫。我们将从本教程中使用的自定义 URL 中获取以下两个重要元素:

  1. URL 中的价格列表
  2. URL 中的标题列表

我们将在每种情况下使用 Python 程序,并通过这些程序,我们将了解 lxml 模块的网络爬虫实现过程。

实现 1:使用 lxml 模块的网络爬虫获取价格列表

此实现方法将使用 lxml 和 requests 模块的函数在输出中从自定义 URL 获取价格列表。在此实现中,我们将使用以下示例程序从“新发布”中获取价格列表。

示例 1

输出

The price list from the URL of new releases:

Python lxml Module

正如我们所见,“新发布”URL 的价格列表已成功打印在输出中,我们甚至可以将此列表保存以备将来使用。

说明

为了使用其函数来实现网络爬虫,我们在程序中导入了 lxml 模块中的 html 库和 requests 模块。之后,我们初始化了一个 URL 变量,并将新发布 URL(我们将对其执行网络爬虫)放在该变量中。

然后,我们使用 requests 模块的 get() 函数和 URL 变量通过发送请求来从 URL 获取数据。我们在 getHtml 变量内部使用了 get() 方法,然后在此变量上使用 fromstring() 方法在程序中获取 URL 的内容。

我们在初始化的变量 docContent() 中使用了 fromstring(),并进一步将此变量与 xpath 变量一起使用。我们使用 lxml 模块的 xpath() 函数在 'xpathComplete' 变量中定义了 URL 的完整 xpath。之后,我们再次通过 xpath() 函数在 'xpathPrices' 变量中定义了价格的 xpath。

最后,我们使用 print 语句中的 'xpathPrices' 变量在输出中打印价格列表,并且程序将通过网络爬虫从网页中检索价格列表。

实现 2:使用 lxml 模块从 URL 获取标题列表

在此实现方法中,我们将通过使用 lxml 和 requests 模块实现的网络爬虫,在输出中从自定义 URL 获取价格列表。在此实现部分,我们将使用以下示例程序来获取“新发布”中的标题列表。

示例 2

输出

The title list from the URL of new releases:

Python lxml Module

正如我们所见,“新发布”URL 的标题列表已成功打印在输出中,我们甚至可以将此列表保存以备将来使用。