使用Selenium

您可以通过pip安装selenium模块:

在这里,我们首先创建一个表示浏览器的webdriver对象。 这样做会在运行代码的计算机上打开Chrome浏览器。 然后营销引流,通过调用webdriver对象的get方法,我们可以打开URL。 最后,我们通过访问webdriver对象的page_source属性来获取源代码。

在这两种情况下,URL的HTML源都作为字符串存储在page变量中。

解析HTML和提取数据

不必深入计算机科学理论自动抓取网页数据工具,我们可以将解析定义为分析字符串的过程,以便我们可以理解其内容,从而轻松访问其中的数据。

在Python中,有两个库可以帮助我们解析HTML:BeautifulSoup和Lxml。 Lxml是一个比BeautifulSoup更低级的框架,我们可以在BeautifulSoup中使用Lxml作为后端,因此对于简单的HTML解析,BeautifulSoup将是首选的库。

但在我们深入分析之前,我们必须分析网页的HTML,看看我们想要抓取的数据是如何构建和定位的。只有当我们掌握了这些信息时,我们才能从解析的HTML中获取我们想要的信息。但幸运的是,我们不必在编辑器中打开源代码,并手动理解每个HTML元素并将其与渲染页面中的相应数据相关联。大多数浏览器都提供了一个检查器,比如Chrome的开发人员工具,它使我们只需单击它们即可快速查看任何元素的HTML代码。

要在Chrome中执行此操作,请在Chrome中打开网页,然后右键单击要抓取的数据,然后选择“检查”。在Firefox中,此选项称为Inspect Element – 这是在做相同的事情,但只是名称不同。

自动抓取网页内容_如何自动抓取网页上的数据_自动抓取网页数据工具

您会注意到Chrome窗口底部打开了一个窗格,其中包含您单击的元素的源代码。 浏览一下源代码,了解我们想要抓取的数据是如何在HTML代码中构建的。

经过一些检查后你可以理解,上的每个引用都包含在一个带有class =“quote”属性的div中。 在该div中,引用的文本在class =“text”的范围内,作者的名称在class =“author”的小标签中。 当我们实际解析HTML并提取数据时,将需要此信息。

现在,让我们开始使用BeautifulSoup解析HTML页面。 但首先,我们必须安装它:

自动抓取网页内容_自动抓取网页数据工具_如何自动抓取网页上的数据

安装好之后,可以像下面这样在代码中调用:

如何自动抓取网页上的数据_自动抓取网页内容_自动抓取网页数据工具

首先,我们通过将页面传递给BeautifulSoup类构造函数来创建页面的解析版本。 如您所见,我们还将第二个参数html.parser传递给构造函数。 这是Beautiful Soup将用于解析传递给它的字符串的解析器的名称。 你可以使用我们之前谈到过的解析器lxml,因为你已经安装了Lxml库。

自动抓取网页数据工具_如何自动抓取网页上的数据_自动抓取网页内容

然后,我们提取包含class =“quote”的页面中的所有div标签,因为我们知道这些是包含引用的div。 为此,Beautiful Soup 4提供了find_all功能。 我们将标记名称和类名称传递给find_all函数,并返回满足条件的所有标记,即包含引用的标记。

这里需要注意的一件重要事情是,我们在这里使用树结构。 变量soup以及引用的每个元素都是树。 在某种程度上,引用的元素是较大的soup树的一部分。 无论如何,为避免进入不同的讨论,让我们继续。

自动抓取网页内容_自动抓取网页数据工具_如何自动抓取网页上的数据

我们知道引用的文本是带有class =“text”的span标记,而作者是带有class =“author”的小标记。 要从quote元素中提取它们,我们再次使用类似的函数find。 find函数使用与find_all函数相同的参数。 唯一的区别是它返回满足条件的第一个标记,而find_all返回标记列表。 此外,我们希望访问返回对象的text属性,该对象包含该标记中包含的文本。

因此,正如您在代码中看到的那样,我们遍历列表引用的所有元素,并提取引用文本和作者名称,将它们存储在名称为scraped的列表。 在控制台上打印时,已抓取的列表如下所示:

自动抓取网页数据工具_自动抓取网页内容_如何自动抓取网页上的数据

存储检索的数据

一旦我们获得了数据,我们就可以以任何我们想要的格式存储它,例如CSV文件,SQL数据库或NoSQL数据库。 严格来说,这一步不应算作抓取过程的一部分,但为了完整起见,我将简要介绍它。

我想说最流行的存储抓取数据的方法是将它们存储为CSV电子表格,所以我将简要介绍如何做到这一点。 我不会详细介绍,因为您应该参考官方的Python文档。 所以,不用多说,让我们看看代码。

如何自动抓取网页上的数据_自动抓取网页内容_自动抓取网页数据工具

我们可以看到,代码非常明显。 我们从打开的quotes.csv文件创建一个CSV编写器对象,然后使用writerow函数逐个写入引用。 很明显,writerow函数接受一个列表作为输入,然后将其作为一行写入CSV。

结论和后续步骤

本教程应该帮助您了解在学习自己实现简单的scraper时基本上是什么。 这种抓取应该足以实现简单的自动化或小规模数据检索。 但是如果你想有效地提取大量数据,你应该研究一下抓取框架,特别是Scrapy。 它可以帮助您使用几行代码编写非常快速,高效的scraper。 无论你使用什么样的框架,在那个闪亮的表面下面自动抓取网页数据工具,框架也使用这些非常基本的抓取原则,所以理解本教程应该可以帮助你为开始抓取的探险建立基础知识。

英文原文:

译者:javylee

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注