你是否在寻找一种具有成本效益的方法来爬取相关的网站数据?Excel VBA是一个不错的选择。几乎没有编码经验,本指南将帮助你学习如何启动微软VBA并将网站数据爬取到Excel电子表格中。

在这个数字时代,网站在我们作为个人或企业的日常生活中发挥着主要作用。你会同意我的观点,企业和自营职业者每天都在使用网站进行交易。因此,这些网站是产生数据的良好来源,用于做出明智的经济、政治、健康和人口决策。这种从网站中提取有价值信息的过程被称为 “网络抓取”。

根据你要爬取的数据集,存在几种从网站收集数据的方法。一个例子是Excel VBA。你会有兴趣知道,Microsoft Excel无疑是全世界各个学科中使用最多的数据处理应用程序之一。

无论你是数字原住民还是移民,你可能都听说过或熟悉Excel的基本功能。通过微软Excel,你可以使用不同的函数和公式来存储、组织和处理数据。然而,这个应用程序的另一个独特用例是,它允许用户访问网页,从中提取数据。

因此,在这篇文章中,我们将探讨用Excel VBA从网页中提取有价值的数据的不同步骤。但首先,让我们了解一下VBA网页抓取的真正含义。


什么是VBA网络爬取?

VBA网络爬取是一种独特的数据爬取技术,可用于自动收集网站的数据并将其导出到Excel。这是一种网络爬取技术,通过使用外部应用程序(如微软Edge浏览器)来实现。

然而,VBA是 “Visual Basic Application “的缩写。这实质上是微软公司的一种编程语言。它扩展了微软Office工具的功能。

因此,用户可以利用这种微软编程语言来开发高级功能和复杂的自动化。也许可以使用VBA的核心原因是编写宏,将数据从网站拉到Excel中。


使用VBA进行网络爬取的优势和劣势

既然我们现在知道了什么是VBA网络爬取,那么在进入教程之前,有必要强调一下用VBA对Excel进行网络爬取的一些优点和缺点。

优势

1.完全自动化。在Excel中,你几乎可以把你做的任何事情自动化。你不必整天坐在电脑前做冗长、耗时的工作。在你做其他事情的时候,Excel会做这些工作。例如,在运行VBA脚本时,你不需要执行任何额外的任务,甚至不需要与浏览器互动。

2.可靠。Microsoft Excel总是以相同的方式执行任务,因此,你确信每次都能得到非常准确和一致的结果。另外,由于Microsoft Excel和VBA是由微软开发和维护的,这些工具可以一起升级到最新版本,没有任何挑战。

3.随时可用。如果你已经安装了Microsoft Office,你就不必再安装其他东西了。这是因为VBA是与Microsoft Office捆绑在一起的。你可以在所有的Microsoft Office工具中立即使用VBA。

劣势

1.只在Windows中工作。 Excel VBA的一个缺点是,它没有跨平台支持。它只能在Windows环境下工作。另外,该库的资源是有限的。因此,第三方的爬取工具很难整合。

2.它有一个陡峭的学习曲线。如果你必须用VBA刮取数据,你必须学习如何用VBA写程序。然而,VBA编程语言不是特别方便用户使用。它比其他现代编程语言,如JavaScript、Go或Python,要难一些 。


用Excel VBA提取网站数据的指南

在本指南中,我们将研究如何使用微软Edge和谷歌Chrome浏览器进行VBA网络爬取。

用Excel VBA提取数据的要求

要使用Excel VBA提取网站数据,必须具备某些条件。为了使整个过程更容易,我们必须安装和设置本教程的所有先决条件。

因此,在本指南中,我们将使用。

  • Windows 11操作系统。
  • 微软365。
  • 微软Edge。
  • 谷歌浏览器。
  • Selenium(用于在谷歌浏览器上进行VBA爬取)。
  • 对HMTL和CSS有基本了解。

注意:你也可以使用任何一个旧版本的Windows操作系统和微软Office套件(如果你的电脑上没有MS Office,请确保安装它)来遵循本指南。另外,我们使用微软的Edge浏览器来进行这种Excel VBA数据提取,因为前面的IE浏览器原本是兼容这种数据提取的,但已经被Windows停用了。

你还应该注意到,使用Excel VBA提取数据可以在其他浏览器中进行,这也是我们要做的。但是,这需要一些额外的软件。例如,如果你想使用谷歌浏览器来做VBA网络抓取,你就必须安装Selenium。


用Excel VBA提取网站数据(Microsoft Edge)

准备好Excel的VBA环境

在所有的要求就绪后,按照下面的步骤在Excel中设置开发环境。这是为了启用开发者功能区,使用户能够访问VBA。

  • 打开Microsoft Excel。点击键盘上的Windows键,可以快速访问你的应用程序。如果你一直在使用Microsoft Excel,它将被列在钉住的应用程序下。如果它不在那里,继续点击右上角的所有应用程序。向下滚动,找到Microsoft Excel,并点击它打开。继续点击 “文件“功能区。
  • 启用开发者功能区。很明显,Microsoft Excel默认不会显示开发者功能区。你必须手动启用它。因此,在点击文件功能区后,向下滚动到侧边栏的最后一个选项,更多… 当你点击它时,你会看到另外两个选项。反馈选项。 点击 “选项“。
  • 选择 “ 自定义功能区 “选项一旦你点击选项,就会弹出一个对话框。从侧面的菜单中,选择自定义功能区
  • 点击开发人员 旁边的复选框。 确认复选框被点击后,你就可以点击确定。现在你应该看到菜单栏上的开发者功能区
  • 添加一个新的模块和引用。激活上述VBA功能区后,我们需要插入一个新的模块和引用。要做到这一点,点击我们刚刚激活的开发者功能区,打开Visual Basic应用程序。选择Visual Basic来开始这个过程。
  • 要添加一个新模块,你会看到一个新的窗口打开,如下图所示。这是在你点击了Visual Basic之后。

点击了Visual Basic之后

第1步:点击菜单上的插入,向下滚动,然后点击模块

准备好Excel的VBA环境第1步

第2步:新模块应该看起来像这样。

准备好Excel的VBA环境第2步

要添加新的参考资料,从顶部菜单中选择工具。选择第一个选项。参考资料

参考资料

第3步:当你点击 “参考资料 “时,将打开一个新的窗口,如下图所示。从可用的引用列表中勾选Microsoft HTML Object LibraryMicrosoft Internet Controls的方框。当你在模块中引用这两个文件时,它将有助于在你设置Microsoft Edge时打开它。一旦你完成了复选,点击确定

准备好Excel的VBA环境第3步

第4步:初始化一个新的子程序。这是VBA网络爬取的子程序。在模块中键入以下代码,如下图所示。

注意:你可以在选择你的参考资料之前或之后这样做。无论哪种方式,都会有效果。

代码

Sub VBA_Web_Scraping ()

End Sub

准备好Excel的VBA环境代码

这就是你要设置的开发环境。下一步将是使Microsoft Edge自动化,以便它能打开一个网页。


自动化Microsoft Edge打开一个网站

在进入微软Edge的自动化之前,有必要指出,Excel VBA最初只支持基于Internet Explorer的自动化。然而,微软在2022年7月停用了Internet Explorer。然而,他们确实发布了一些更新,使InternetExplorer模块能够在IE模式下运行Microsoft Edge浏览器。

因此,当我们写 “Internet Explorer “来与微软的Edge浏览器互动时,不要感到惊讶。此外,我们将在指南中编写的代码也与拥有Internet Explorer的旧版Windows兼容。


使用Excel VBA打开Microsoft Edge。

好了,现在是时候更新我们的模块,使Edge浏览器能够打开一个网站。在本教程中,我们将打开https://www.iban.com/country-codes。步骤如下。

第1步:在激活了互联网控件后,我们将插入输入并使用下面的代码声明必要的对象。你应该知道,如果你没有设置你的参考,你将无法看到Internet Explorer。所以,如果你还没有这样做,你可以参考上面的部分来快速完成。

代码

Sub VBA_Web_Scraping ()

Dim ie As Object

Dim url As String

url = “https://www.iban.com/country-codes”

End Sub

第2步:在上面的代码中,我们定义了一个子程序,叫做VBA_Web_Scraping()。 我们还在子程序中定义了两个对象:ieURL。 该代码还显示了我们要爬取数据的网站地址

第3步:为了确保VBA在IE模式下打开Microsoft Edge并浏览网站,参照我们已经输入的网站地址,添加以下一组代码。

代码

Set ie = CreateObject("InternetExplorer.Application")

ie.Visible = True

ie.navigate url

在我们刚才写的代码中,ie对象使我们能够访问Microsoft Edge。你会注意到的另一件事是,浏览器已被设置为可见,这样我们就可以看到正在发生的事情ie.Visible = True)。这不是必须的,但它可以很有帮助,特别是当你想检查你正在抓取的网站的HTML代码时。


使用VBA在Microsoft Edge中打开一个网站

在上一节中,我们演示了如何用VBA打开一个网站。当你检查最后一组代码时,我们使用了ie.navigate()函数来告诉VBA浏览器打开我们输入的URL。你应该在Internet Explorer中看到一个类似下面的弹出窗口。你可以自由地将浏览器最大化,这样你就可以正常浏览了。

使用VBA在Microsoft Edge中打开一个网站

因此,浏览器已经准备好让你检查目标网站的HTML代码。

使用VBA从一个网站上刮取数据。

我们现在将进行适当的数据爬取。要做到这一点,请遵循以下步骤。

第1步:检查你想爬取的网站。尽管如此,对HTML和网络编程的一些熟悉是必要的。然而,由于网站结构变化非常频繁,这是一种很好的在线爬取技术。

要检查网页,在你想提取数据的页面元素上点击右键。在我们的例子中,我们要提取的是表格数据。右键单击后,选择检查元素。在检查窗口中,你应该能够看到数据结构,如数据的类别名称,甚至标签。请确保注意这组信息,因为当你开始编写VBA代码来提取数据时,你会需要它。

你应该看到底部的InternetExplorer开发工具标签,上面有该页面的代码。

第2步:添加Do WhileDo EventsDo UntilVBA循环。这些将导致一个短暂的暂停,以允许网页正常加载。它将迫使宏等待,直到目标页面进入就绪状态完成模式。

代码

Do While ie.Busy: DoEvents: Loop

Do Until ie.readyState = 4: DoEvents: Loop

第3步:为了提取表格数据,请写下以下代码。

接下来的一行代码是针对爬取表格数据的。首先,我们将用一个变量tbl声明HTML元素。我们还将设置它使用getElementById方法来获取特定表格的数据。如果你仔细看一下这个VBA方法,我们是通过一个CSS Id选择器来爬取的。

通过CSS Id选择器从网页上爬取HTML表格数据或任何其他所需的内容,比通过类选择器爬取要容易得多。这是因为Id选择器对它所分配的任何元素都是唯一的。

代码

Dim tbl As HTMLTable

Set tbl = ie.document.getElementById("myTable")

At this point, we are ready to send that table data to our worksheet.

Next, we would set two variables that would represent our worksheet column and row.

代码

Dim rowCounter As Integer

Dim colCounter As Integer

rowCounter = 1

colCounter = 1

现在,我们将再次声明表格元素,但这一次将是trtd等。请确保重新检查表格的HTML代码,以捕获所有必要的元素。

代码

Dim tr As HTMLTableRow

Dim td As HTMLTableCell

Dim th

我们将快速声明我们的工作表,以便将其排除在外。注意,我们已经将我们的工作表声明为mysh。然而,mysh也将被设置为我们工作表的名称,在本例中是VBA_Web_Scraping

VBA_Web_Scraping

注意,当你启动VBA时,你的工作表名称会是sheet1、sheet2等。你可以通过双击或者在默认情况下这样使用,去改变名称。

代码

Dim mysh As Worksheet

Set mysh = ThisWorkbook.Sheets("Web Scraping")

最后,输入下面几行代码来访问表格的内容。

代码

For Each tr In tbl.getElementsByTagName("tr")

'Loop through table header.

   For Each th In tr.getElementsByTagName("th")

    mysh.Cells(rowCounter, colCounter).Value = th.innerText

    colCounter = colCounter + 1

   Next th


Integer Module Coding




Loop through table Cells


'Loop through table cells.

    For Each td In tr.getElementsByTagName("td")

        mysh.Cells(rowCounter, colCounter).Value = td.innerText

        colCounter = colCounter + 1

    Next td

    colCounter = 1

    rowCounter = rowCounter + 1

Next tr

The complete VBA code would look like this:

Sub VBA_Web_Scraping()

Dim ie As Object

Dim url As String

url = "https://www.iban.com/country-codes"

Set ie = CreateObject("InternetExplorer.Application")

ie.Visible = True

ie.navigate url

Do While ie.Busy: DoEvents: Loop

Do Until ie.readyState = 4: DoEvents: Loop

'Declaring the table elements.

Dim tbl As HTMLTable

Set tbl = ie.document.getElementById("myTable")

'Declaring variables for our worksheet column and roll.

Dim rowCounter As Integer

Dim colCounter As Integer

rowCounter = 1

colCounter = 1

'Dclaring the table elements again.

Dim tr As HTMLTableRow

Dim td As HTMLTableCell

Dim th

Dim mysh As Worksheet

Set mysh = ThisWorkbook.Sheets("VBA_Web_Scraping")

For Each tr In tbl.getElementsByTagName("tr")

'Loop through table header.

   For Each th In tr.getElementsByTagName("th")

    mysh.Cells(rowCounter, colCounter).Value = th.innerText

    colCounter = colCounter + 1

   Next th

'Loop through table cells.

    For Each td In tr.getElementsByTagName("td")

        mysh.Cells(rowCounter, colCounter).Value = td.innerText

        colCounter = colCounter + 1

    Next td

    colCounter = 1

    rowCounter = rowCounter + 1

Next tr

End Sub

输出

当你写完你的代码后,按F5或点击绿色的播放按钮来运行你的代码。

刮取数据的结果应该在你的工作表中看起来像下面的图片。

输出


用Excel VBA提取网站数据(谷歌浏览器)

使用Excel VBA和谷歌浏览器刮取网站数据的第一步是安装Selenium库。要做到这一点,请按照下面的简单步骤进行。

安装Selenium。

第1步:访问GitHub网站,这里

第2步:点击可执行文件,下载该文件。

第3步:下载后,双击它开始安装SeleniumBasic-2.0.9.0.exe

第4步:在弹出的设置窗口中点击下一步

第5步:仔细阅读许可协议,如果你没有意见,选择我接受协议。你可以点击下一步继续前进。

第6步:一个标记的下拉选项将出现在下一个窗口。点击它,从完全安装、紧凑安装  自定义安装 三个选项中选择紧凑安装。作出选择后,点击下一步。

第7步:点击下一步后,之后出现的窗口会显示安装文件夹的路径(C:\Users\jonah\AppData\Local\SeleniumBasic。请务必写下它或记住它,因为你以后会用到它。点击安装,将Selenium安装到你的电脑上。

第8步:最后,点击完成,完成Selenium的安装过程。

就这样了,你已经完成了Selenium的安装。然而,我们还需要下载ChromeDriver。


下载ChromeDriver

要下载ChromeDriver,你需要知道你的谷歌浏览器版本。

第1步:要检查你的Chrome浏览器的版本,点击谷歌浏览器右上角的三点按钮。

第2步:向下滚动下拉列表,点击帮助。

第3步:会出现另一个下拉列表。点击 “关于谷歌浏览器“,查看你的浏览器版本。

现在你应该看到你的Chrome浏览器版本。

  • 现在你知道了你的谷歌浏览器版本,请到这里的Chrome Driver网站下载。请确保根据您的浏览器版本下载Chrome驱动程序
  • 你会被引导到下载链接。你会注意到,ChromeDriver同时适用于Windows和Mac。选择适合你的操作系统的那一个–在我们的例子中,我们选择Windows。
  • 下载后,在你的下载文件夹或你为下载文件指定的任何其他位置寻找该文件。它将是一个压缩文件。右键单击它,选择解压缩到chromedriver_win32,以解压缩它。一个文件夹将以该名称创建。
  • 打开那个新文件夹,选择你在那里看到的可执行文件。按Ctrl+C复制该文件。
  • 还记得安装Selenium的路径吗?按Ctrl+V键导航到那里,粘贴 “Chrome驱动”

很好!你的Selenium已经准备好在Excel VBA中引用。你的Selenium已经准备好在Excel VBA中引用了。


如何在VBA中引用Selenium库

要在VBA中引用Selenium库,请遵循以下步骤。

第1步:在你的电脑上打开Microsoft Excel,点击顶部的开发者功能区。之后,选择Visual Basic

第2步:VBE(Visual Basic编辑器)窗口将立即打开。之后,单击“工具“,接着是 “参考资料 “,以参考Selenium库。

第3步:引用对话框打开时,选择Selenium类型库并点击确定

第4步:在编写VBA代码之前,你应该检查你旨在爬取的网站的元素,并观察它们的数据结构,就像我们之前对Microsoft Edge的IEMode所做的那样。

第5步:在彻底检查了网站之后,你现在可以前往Excel VBA环境编写代码。要做到这一点,请点击插入,然后点击模块,就像我们之前做的那样。

第6步:模块打开后,在编辑器中写下以下代码。

代码

Sub VBA_Web_Scraping()

Dim tdl As New WebDriver

'Declaring variables for worksheet column and roll.

Dim rowCounter As Integer

Dim colCounter As Integer

rowCounter = 1

colCounter = 1

Application.ScreenUpdating = False

tdl.Start "chrome"

tdl.Get " https://www.iban.com/country-codes "

For Each th In tdl.FindElementById("myTable").FindElementByTag("thead").FindElementsByTag("tr")

colCounter = 1

For Each t In th.FindElementsByTag("th")

Sheet2.Cells(1, colCounter).Value = t.Text

colCounter = colCounter + 1

Next t

Next th

For Each tr In tdl.FindElementById("myTable").FindElementByTag("tbody").FindElementsByTag("tr")

colCounter = 1

For Each td In tr.FindElementsByTag("td")

Sheet2.Cells(rowCounter, colCounter).Value = td.Text

colCounter = colCounter + 1

Next td

rowCounter = rowCounter + 1

Next tr

Application.Wait Now + TimeValue("00:00:20")

End Sub

上面的代码显示,我们创建了一个名为VBA_Web_Scraping的 子程序。之后,我们为我们的工作表的列和行声明了变量。

为了打开谷歌浏览器和我们想要的网页,我们使用了tdl.Starttdl.Get。我们还在这里提供了网页的URL。代码的其余部分告诉VBA获取表格元素并将它们添加到我们声明的工作表中。为了从表中获取数据,我们使用了FindElementByIdFindElementByTag方法。

输入代码后,将该子程序分配给一个Excel按钮。


创建一个按钮和指定一个宏

接下来,我们将不得不插入一个按钮,并为其分配一个宏。这是Excel VBA提取网站数据过程中的一个非常重要的阶段,所以要确保你在保存前正确输入代码。

第1步:开始时,点击开发者标签。在这之下,点击插入。会出现一个下拉菜单;在表单控件下,点击第一个代表按钮的图标。

创建一个按钮和指定一个宏

第2步:点击 拖动你的鼠标光标来创建按钮。

第3步:将弹出 “分配 宏 “对话框,如下图所示。如果你正确保存了该模块,你会在宏名称列表中看到VBA_Web_scraping 。继续前进,选择它作为宏名称。点击 “确定“来分配该宏。

第4步:要给按钮命名,右击它并选择编辑文本。你可以把它编辑成所需的按钮名称。我们将命名为 “表数据“。

第5步:如果你做得正确,你的按钮应该看起来像这样。

你的按钮应该看起来像这样

现在是运行我们之前输入的代码的时候了。

输出

点击我们刚刚创建的按钮,开始。之后,继续检查工作表。你会看到,从网页表中刮出的数据与我们之前的数据是一样的。


关于使用Excel VBA提取网站数据的常见问题

虽然有些网站不允许,但网络爬取一般不违法。因此,VBA网络爬取也不违法。由于这是一种合法使用微软产品的数据提取技术,你肯定是安全的。然而,重要的是要注意通过Excel VBA进行网络爬取的灰色地带,这可能导致违反网站的政策。

Q.我是否可以使用Excel VBA来创建一个单一的代码来刮取每个网站?

简短而不复杂的答案是否定的。虽然方法相似,但刮取各种网页的代码略有不同,特别是将VBA连接到外部浏览器时。事实上,每个网站都有独特的网页结构和风格,这是造成这种情况的原因之一。刮取电子商务网站的代码所使用的方法与抓取Facebook等社交平台的代码不同。

Q.为了使用Excel VBA来提取网站数据,我是否需要编程经验?

为了有效地使用Excel VBA提取数据,掌握一点编码知识很重要。这将让你知道该怎么做,即使你不得不遵循一个教程。这是用VBA进行网络爬取的缺点之一。然而,学习曲线可能很陡峭,但如果你有决心,你可以在短时间内学会VBA编程。


总    结

毫无疑问,在我们这个数字发达的社会中,从网站上抓取相关数据就像石油一样重要。由于有不同的技术来生成这些数据,Excel VBA网络抓取仍然是收集数据的最古老和最有效的方法之一。

虽然这需要对代码有一些基本的了解,但如果你用心去做,即使是初学者也可以做到。我们希望本教程能给你一些关于用Excel VBA进行网络抓取的方向。

这篇文章有用吗?

点击星号为它评分!

平均评分 / 5. 投票数:

到目前为止还没有投票!成为第一位评论此文章。

No more articles