🥑使用Beautiful Soup和Requests爬网

Python | Beautiful Soup | Requests

通过一个项目使用Beautiful Soup和Requests库。

Web抓取是一种从不同网站抓取数据的技术。 该数据可以采用文本,链接,表格和图像的形式。 尽管从网站上抓取任何私人数据是非法的,但我们仍然可以抓取所有公开可用的数据,并且可以在我们的项目中使用它们。 公开数据是一种公开的数据,供所有人使用,例如,参见电子商店中可用的图书清单。 私有数据是公司用户私有的数据,例如登录凭据,购物车详细信息。

在某些情况下,当我们需要比较不同网站上不同产品的价格,或者我们需要了解来自不同网站或特定网站的产品评论时,Web抓取可能会非常有用。

我们将在总共5节中全面介绍Web爬网。

  1. 安装与理解

  2. Find vs Find_all vs Select

  3. 从网上抓取链接,表格和图像

  4. 分页和文件交互

  5. 项目

安装与理解

在Python中,我们有许多库和程序包可用于执行Web抓取,但是最简单,最简单的库是Beautiful Soup。

Beautiful Soup是用于解析HTML和XML文档的Python软件包。 它为不同的解析页面创建了一个解析树,可用于从Source(HTML)提取数据,这对于Web抓取非常有用。 它适用于python 2和3。Beautiful Soup使用请求模块将连接请求发送到目标服务器。

Requests是一个Python HTTP库,根据Apache License 2.0发布。 它也是python中安装最多的软件包。 该库的目标是使HTTP请求更简单,更人性化。 使用单行代码,我们可以在python脚本和目标服务器之间建立连接。

首先,安装所有需要进行网络抓取的库。 首先,您需要从python.org安装最新版本的python。 现在打开终端并创建一个文件夹并命名为任何名称,但是如果要遵循相同的名称,只需将其命名为Bs4。 现在,在文件夹Bs4中,我们将创建一个虚拟环境,以便可以在其中安装所有软件包。 输入,

在终端。 这里的env是环境名称。 现在您需要激活环境,只需在终端中键入env \ scripts \ activate即可激活您的环境。 现在,您需要安装软件包,只需使用pip并安装所有软件包即可。

只是为了检查,键入python,然后导入请求(如果一切顺利),那么您将不会看到任何错误。

网页结构

HTML代表超文本标记语言。HTML用于设计网页的结构。 它包含几个标签,页面的整个内容都驻留在其中。 在HTML中,有不同的标签可以完成不同的工作。 对于图片,有一个IMG标签,对于标题,有标题标签(h1-h6)等。 我们还可以通过将一个标签放在另一个标签中来在HTML中执行标签的嵌套。 HTML中的每个标记都有一个唯一的ID或一个称为CSS选择器的类。 使用这些CSS选择器,我们执行抓取。 让我们看一个简单的HTML网页的示例。

在上面的HTML代码中,我们可以看到整个代码分为两个主要标签head和body。 在head标签中,我们具有meta标签,标题以及指向不同文件和API的链接。 在我们的正文标签中,我们具有标题标签,段落标签,图像标签,链接和div标签。 div标签就像一个容器,我们可以在其中存储任何内容。 在第二个div标签中,我们还有一个唯一的ID和一个类名。 使用这些类名和ID,我们将从网页上抓取数据。

工作原理

同样如上图所示,首先,我们向服务器发送Http连接请求,然后服务器以响应方式回复给我们。 如果响应为<200>,则说明我们已经成功实现了机器与Web服务器之间的连接。 下一步是使用Beautiful Soup库从服务器获取源代码。 为此,我们再次向服务器发送请求,然后服务器用源代码回复给我们。 然后,使用Beautiful Soup Library中的一些函数,取出所需的所有内容。

下面的代码说明了如何将请求发送到服务器,以及如何返回响应。

现在,让我们尝试使用BeautifulSoup库获取网页的源代码。

Find vs Find_all vs Select

使用CSS选择器,使用Find,Find_all以及Select这三个选项从源代码中获取内容。 让我们一个接一个地看。

Find

它查找元素或选择器的第一个匹配项。 它主要用于从网页中获取标题,标题和产品名称。 让我们通过一个例子来更多地了解它。 在下面,我们提供了网页的源代码。

在上面的使用find的源代码中,如果我们做soup.find('div'),则结果输出包含第一个div,其ID为main-div。 如果我们做soup.find('h1')也是一样,它将返回id为secondary-div的div内的第一个h1。 要从结果输出中获取文本,我们使用.text。 要获取Python文本,我们需要运行soup.find('h1').text

我们还可以使用CSS选择器(例如class和id)从网页中获取内容。 如果需要使用find获取文本网页抓取,则需要使用选择器soup.find('h1',{'id':'second-h1'}).text。 让我们看一下它在一个真实示例中的工作。

Find_all

它查找所有出现的元素或选择器。 它主要用于从网页上的表格,产品评论,详细信息和列出的产品中抓取数据。 让我们通过上面看到的相同示例进一步了解它。

在上面的使用Find_all的源代码中,如果我们做soup.find_all('div'),那么它将返回我们源代码中存在的所有div。 如果我们做soup.find_all('h1')同样,那么它将返回我们所有的h1标签。 需要记住的一件事是,它总是以列表格式返回输出,因此,如果我们要获取文本,则需要使用索引,然后使用for循环将其应用于列表中的每个元素。 让我们在一个真实的示例中进行查看。

Select

它直接以列表形式选择元素或选择器。 它同时使用CSS选择器和标签选择器。 它比Find和Find_all功能更强大。 它还以列表形式返回输出。 要从列表中选择任何内容,我们只需要在选择中传递类名或ID或标记即可将其选中。 让我们通过与上述相同的HTML代码来进一步了解它。

如果要选择所有div,则使用select,而不是只需要将div作为参数传递,并且所有div都将被选中汤。select('div')。 现在,如果您想选择文本Python,那么我们只需要使用CSS选择器ID并使用get_text()函数soup.select('#first-h1')。get_text()即可。 对于id,我们需要使用#;对于class,我们需要使用。 和我们在CSS中所做的一样。 让我们尝试在实际示例中使用它。

从网上抓取链接,表格和图像

让我们首先实例化我们的环境,然后导入所有库并从服务器获取源代码。

链接

每当我们试图从网站上获取产品的详细信息时,抓取链接都是非常有用且方便的。 在HTML中,所有链接都位于锚标记href属性内。 要抓取链接,我们首先需要抓取锚标记,然后使用attribute属性我们可以抓取链接。

要从网页中删除所有链接,我们可以使用find_all或select两者,然后查找所有的anchor(a)标记。

输出将是网页上所有可用的链接。

要从特定选择器中删除链接,我们只需要选择该选择器,然后我们就可以轻松获取属性href的值

抓表是最常用的网页抓取方式。 每当我们为数据科学或机器学习项目创建数据集时,我们都需要从第三方资源中获取数据。 通常,要从表中抓取数据,我们首先需要抓取表标签,然后再抓取表的主体和表头。 我们可以在网上找到很多类型的表,并且执行网络抓取和抓取数据对于每个表都是不同的。 在下面,我们将看到三种类型的表,并了解如何从它们中抓取数据。

  1. 具有适当主题和表体的表:首先,获取表,然后获取表头,然后将其与表体连接起来。 我们还将表数据保存到CSV文件中。

  2. 不带主题的表:这种情况比以前简单得多,因为在这种情况下,我们只需要抓一下表体即可。 要抓取表格主体,首先要从主体中抓取所有tr,然后在每个tr中抓取所有td并将它们附加在列表中。

  3. 多个标题和行,其中有一个空行

图像

当我们为深度学习模型准备数据集时,抓取图像会非常方便。 这也非常艰巨,对于每个网站,其过程都会有所不同。 在此文中,我向您展示如何从快门库存中抓取图像。 要抓取图像,我们首先需要获取img标签,然后需要从该标签获取src属性,最后,我们使用request模块将图像保存为png或jpg格式。

分页和与文件的交互

项目

本文及附加项目完整代码

🏈指点迷津 | Brief

Last updated