Python lxml模块

Python lxml模块

我们都应该听说过网页抓取以及如何使用网页抓取从网站中获取信息。网页抓取非常重要,因为它可以帮助我们从网页或网站中获取所有有用的信息,我们可以从中获取所需的任何信息。现在,我们中的许多人可能会想为什么首先要从网页获取信息,而不是直接访问网页查看信息呢?使用网页抓取过程主要有两个目的,分别是:

  • 首先,当我们需要从网页中查找一些特定的信息时,如果我们直接从网页中查找,会花费很多时间。
  • 其次,使用网页抓取过程非常容易存储和收集任何网站上的所有重要信息。

这是网页抓取重要和我们必须使用网页抓取的两个重要原因。现在,当我们理解了网页抓取在节省时间和获取所有有用信息方面的重要性后,我们都想要学习如何使用网页抓取。我们可以通过多种方法实现和使用网页抓取过程,Python中也提供了多种实现网页抓取过程的方法。

Python为我们提供了多个模块,使用这些模块,我们可以使用Python程序实现网页抓取。其中一个Python模块就是lxml模块,它提供了多个函数库,通过这些函数库可以实现网页抓取。在本教程中,我们将学习Python lxml模块,并学习如何使用该模块实现网页抓取。

注意:在对任何网页或网站进行网页抓取时,我们必须在事先获得一些网站的许可,否则将被视为非法。还有一件需要注意的事情是,在对单个网站发送多个网页抓取请求时,可能会导致该网站屏蔽该操作。

Python中的lxml模块

Python的lxml模块是一个XML工具包,基本上是libxlst和libxml2的Python绑定。lxml模块非常独特和特殊,因为它提供了XML功能和速度的结合。在lxml模块中,我们可以使用多个函数,并且使用这些函数在Python程序中可以轻松执行网页抓取并整理任何网页中的所有有用信息。Python的lxml模块还可以轻松处理所有HTML和XML文件,并在网页抓取过程中应用它。

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

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

在本教程中,我们只学习lxml模块在网页抓取中的实现以及如何使用该模块的函数执行网页抓取。

Python中的lxml模块:安装

Python的lxml模块不是Python内置的库,因此如果我们要使用这个模块来实现Python程序的网络爬取,首先要确保系统中是否安装了lxml模块。如果系统中没有安装lxml模块,我们首先要安装这个模块,然后才能继续进行该模块的网络爬取实现。

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

pip install lxml

在终端中输入上述命令后,我们需要按下回车键来启动安装过程。一旦按下回车键,lxml模块的安装过程将开始,并且安装这个模块成功可能需要一些时间。

Python lxml模块

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

注意:在我们继续使用lxml模块进行网络爬取的实现部分之前,需要注意的是,在使用lxml模块进行网络爬取时,我们还需要另一个Python模块。如果我们想要使用lxml模块进行网络爬取,我们需要在系统中安装Python的requests模块。这是因为Python的requests模块将对我们想要进行网络爬取的网站或网页发出请求。Python的requests模块也不是一个内置模块,因此我们要确保该模块也存在于我们的系统中。如果requests模块尚未安装在我们的系统中,那么我们可以使用pip安装程序来安装此模块。我们必须在命令行终端中使用以下命令:

pip install requests

而且,在编写命令之后,我们必须按照流程进行操作,并等待一段时间,直到请求模块的安装过程完成。

Python lxml模块

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

Python中的lxml模块:实现网页抓取

在本节的实现部分之前,我们需要学习一些内容,然后才能进行网页抓取的实现。

使用lxml模块实现网页抓取的步骤:

在使用lxml模块实现网页抓取时,我们需要按照以下步骤进行操作:

  • 步骤1: 首先,我们需要发送一个我们想要进行网页抓取的网址,然后我们会收到来自该网址的响应。
  • 步骤2: 在收到来自网址的响应后,我们需要将收到的响应对象转换为字节字符串。
  • 步骤3: 接下来,我们需要将转换后的字节字符串响应传递给’fromstring’方法(该方法位于lxml模块的html类中)。
  • 步骤4: 在将响应字节字符串传递给’fromstring’方法之后,我们应该使用网页抓取中使用的网址的xpath来找到特定的元素。
  • 步骤5: 在最后一步中,我们使用xpath从网页中检索到了内容,现在我们可以根据需要使用这些内容或信息,并且我们还可以保存它供以后使用。

这些是我们需要按顺序遵循的步骤来从网页检索特定的内容。我们可以按照上述步骤对任何网址进行网页抓取并检索内容。

网址的xpath

在实现网页抓取的步骤4和5中,我们可以找到单词“xpath”,它对于成功实现网页抓取非常重要。现在,我们中的许多人会问“xpath”是什么,以及我们如何获取一个网址的xpath。我们将在本节中回答这两个问题。

xpath: xpath使用非XML语法提供了一种灵活的方法来定位,它代表XML路径语言,通过xpath,我们可以指向给定XML文档(或网页)的不同部分。在网页抓取中使用xpath,以使程序能够定位或唯一标识需要检索的网页部分。xpath是网页抓取中的一个重要元素,因为xpath是程序中唯一指定要检索的网址内容的元素。

现在,第二个问题,我们如何获取给定网址的xpath,对于这个问题的答案是,我们必须按照以下步骤获取网址的xpath:

步骤1: 首先,我们需要访问我们想要进行网页抓取的网址,然后我们需要在那里右键单击,一个带有选项列表的弹出窗口将打开。右键单击该网址页面后打开的窗口将类似于以下内容:

Python lxml模块

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

步骤3: 现在,在此步骤中我们需要再次右键单击,但是现在我们需要右键单击选择检查选项后打开的元素窗口。当我们右键单击div元素时,会打开另一个弹出窗口,其中包含一系列选项。右键单击检查页面窗口元素后将会打开类似以下内容的窗口:

Python lxml模块

步骤4: 在这一步中,我们需要转到复制选项,并在那里会看到很多复制选项。当我们转到复制选项时,将会显示以下选项列表:

Python lxml模块

我们必须选择 ‘complete xpath’ 选项,这样将复制URL的完整xpath,并在网页抓取过程中在我们的程序中使用这个xpath。

在获取我们在网页抓取中使用的URL的xpath时,我们应该遵循以下步骤,并应注意xpath是网页抓取过程中的一个重要元素。

网页抓取的实现:

当我们在Python程序中使用lxml模块来实现网页抓取时,我们在执行程序之前必须解决许多问题,以下是这些问题:

  • 用于网页抓取的目标网站或网页
  • 我们想要获取的信息等

在程序中决定并解决这些问题之后,我们可以执行程序并通过lxml模块实现网页抓取。

在本节中,我们将使用自定义的URL,并在该自定义URL上执行网页抓取,即获取其xpath。我们将从我们在本教程中使用的自定义URL中获取以下两个重要元素:

  1. 来自URL的价格列表
  2. 来自URL的标题列表

我们将在每种情况下使用一个Python程序,并通过这些程序了解通过lxml模块实现网页抓取过程。

实现1:使用lxml模块进行网页抓取获取价格列表:

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

示例1:

# Import requests module in the program
import requests
# Import html from lxml module
import lxml.html
# URL for the source weblink
URL = 'https://store.steampowered.com/explore/new/'
# Get the request for the URL
getHtml = requests.get(URL)
# Using the fromstring method to get html content
docContent = lxml.html.fromstring(getHtml.content)
# Getting complete xpath from the URL
xpathComplete = docContent.xpath('//div[@id="tab_newreleases_content"]')[0]
# Getting xpath for the prices from URL
xpathPrices = xpathComplete.xpath('.//div[@class="discount_final_price"]/text()')
# Print prices from URL in the output
print("The price list from the URL of new releases:")
print(xpathPrices)

输出:

The price list from the URL of new releases:

Python lxml模块

正如我们所看到的,从“新发布”URL的价格列表已经成功打印出来,并且我们甚至可以保存这个列表以供后续使用。

解释:

我们在程序中导入了lxml模块的html库和requests模块,以便使用它们的函数来实现网页抓取。然后,我们初始化了一个URL变量,并在该变量中提供了新发布URL(我们将在该URL上执行网页抓取)。

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

我们在初始化的变量docContent()中使用了fromstring(),并在xpath变量中进一步使用了这个变量。我们使用lxml模块的xpath()函数在初始化的“xpathComplete”变量中定义了URL的完整xpath。然后,我们再次使用xpath()函数在“xpathPrices”变量中定义了价格的xpath。

最后,我们使用打印语句中的“xpathPrices”变量在输出中打印价格列表,程序将通过网页抓取从网页中提取价格列表。

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

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

示例2:

# Import requests module in the program
import requests
# Import html from lxml module
import lxml.html
# URL for the source weblink
URL = 'https://store.steampowered.com/explore/new/'
# Get the request for the URL
getHtml = requests.get(URL)
# Using the fromstring method to get html content
docContent = lxml.html.fromstring(getHtml.content)
# Getting complete xpath from the URL
xpathComplete = docContent.xpath('//div[@id="tab_newreleases_content"]')[0]
# Getting xpath for the title from URL
xpathTitles = xpathComplete.xpath('.//div[@class="tab_item_name"]/text()')
# Print titles from URL in the output
print("The title list from the URL of new releases:")
print(xpathTitles)

输出:

The title list from the URL of new releases:

Python lxml模块

正如我们所看到的,从“最新发布”URL中获取的标题列表已成功打印在输出中,并且我们甚至可以保存此列表以供将来使用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程