使用 VBA 进行网络抓取

什么是数据抓取?

数据抓取是一种技术,可帮助将 HTML 网页中的所需信息提取到本地计算机上的本地文件中。通常,本地文件可以是 Excel 文件、Word 文件或任何 Microsoft Office 应用程序。它有助于传输网页中的关键信息。

当日常工作涉及研究项目时,数据抓取会变得简单,而此类项目完全依赖于互联网和网站。为了进一步说明这一点,让我们以日内交易者为例,他运行一个 Excel 宏,使用 VBA 从财经网站中提取市场信息并将其放入 Excel 工作表中。

使用 Internet Explorer 进行数据抓取前如何准备 Excel 宏?

在 Excel 中进行数据抓取之前,Excel 宏文件需要执行某些前提条件。

这些先决条件如下:–

步骤 1) 打开基于 Excel 的宏,并访问 Excel 的开发者选项。

Prepare Excel Macro before Performing Data Scraping using Internet Explorer

步骤 2) 在“开发工具”选项卡下选择“Visual Basic”选项。

Prepare Excel Macro before Performing Data Scraping using Internet Explorer

步骤 3) 插入新模块。

Prepare Excel Macro before Performing Data Scraping using Internet Explorer

步骤 4) 初始化新的子程序

Sub test()
End sub

模块将显示如下:–

Prepare Excel Macro before Performing Data Scraping using Internet Explorer

步骤 5) 访问“工具”选项卡下的“引用”选项,并引用 Microsoft HTML Object Library 和 Microsoft Internet Controls。

以下文件需要引用到模块中,因为它们有助于打开 Internet Explorer 并促进宏脚本的开发。

Prepare Excel Macro before Performing Data Scraping using Internet Explorer

现在 Excel 文件已准备好与 Internet Explorer 进行交互。下一步将结合宏脚本,以促进 HTML 中的数据抓取。

如何使用 Excel VBA 打开 Internet Explorer?

步骤 1) 在子程序中初始化变量,如下所示

Sub test()
Dim ie As New InternetExplorer 
Dim doc As New HTMLDocument

步骤 2) 要使用 VBA 打开 Internet Explorer,请编写 i.e. visible=true 并按 F5

Sub test()
Dim ie As New InternetExplorer 
Dim doc As New HTMLDocument
Ie.visible=true

模块将显示如下:–

Open Internet Explorer using Excel VBA

Open Internet Explorer using Excel VBA

如何使用 VBA 在 Internet Explorer 中打开网站?

以下是使用 VBA 在 Internet Explorer 中打开网站的步骤

步骤 1) 一旦您能够使用 Excel VBA 访问 Internet Explorer,下一步将结合使用 VBA 访问网站。这通过 Navigate 属性来实现,其中 URL 必须作为双引号传递到该属性中。请按照所示的以下步骤操作。

Sub test()
Dim, ie As New InternetExplorer
Dim doc As New HTMLDocument
Dim ecoll As Object
ie.Visible = True
ie.navigate"https://demo.guru99.com/test/web-table-element.php"
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE

步骤 2) – 按 F5 执行宏。将打开以下网页,如图所示

Open Website in Internet explorer using VBA

现在,Excel 宏已准备好执行抓取功能。下一步将展示如何使用 VBA 从 Internet Explorer 中提取信息。

如何使用 VBA 从网站抓取信息?

假设日内交易者希望每天访问网站上的数据。每次日内交易者按下按钮时,它都应自动将市场数据拉取到 Excel 中。

从上述网站,需要检查元素并观察数据的结构。

步骤 1) 按 Ctrl + Shift + I 访问以下 HTML 源代码

<table class="datatable">
<thead>
<tr>
<th>Company</th>
<th>Group</th>
<th>Pre Close (Rs)</th>
<th>Current Price (Rs)</th>
<th>% Change</th>
</tr>

源代码将如下所示:–

Sub test()
Dim ie As New InternetExplorer
Dim doc As New HTMLDocument
Dim ecoll As Object
ie.Visible = True
ie.navigate "https://demo.guru99.com/test/web-table-element.php"
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document

可以看出,数据被结构化为单个 HTML 表。因此,为了提取 HTML 表中的全部数据,需要设计一个收集数据的宏,该宏以集合的形式收集数据。

然后将集合粘贴到 Excel 中。为实现所需结果,请执行以下步骤:–

步骤 2) 在子程序中初始化 Html 文档

VBA 模块将显示如下:–

步骤 3) 初始化 HTML 文档中的集合元素

VBA 模块将显示如下:–

Sub test()
Dim ie As New InternetExplorer
Dim doc As New HTMLDocument
Dim ecoll As Object
ie.Visible = True
ie.navigate "https://demo.guru99.com/test/web-table-element.php"
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document
Set ecoll = doc.getElementsByTagName("table")

步骤 4) 使用嵌套循环初始化 Excel 工作表单元格,如下所示

VBA 模块将显示如下:–

Sub test()
Dim ie As New InternetExplorer
Dim doc As New HTMLDocument
Dim ecoll As Object

ie.Visible = True
ie.navigate "https://demo.guru99.com/test/web-table-element.php"
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document
Set ecoll = doc.getElementsByTagName("table")

可以使用工作表的 range 属性或工作表的 cells 属性来初始化 Excel。为简化 VBA 脚本的复杂性,集合数据被初始化为工作簿中工作表 1 的 Excel 单元格属性。

准备好宏脚本后,将子程序传递并分配给 Excel 按钮,然后退出 VBA 模块。将按钮标记为“刷新”或任何合适的名称。在此示例中,按钮被初始化为“刷新”。

Scrape Information from Website using VBA

步骤 5) 按刷新按钮以获得以下输出

Scrape Information from Website using VBA

步骤 6) 比较 Excel 中的结果与 Internet Explorer 中的结果

Scrape Information from Website using VBA

摘要

  • 数据抓取允许用户仅抓取用户想要的信息。要为此目的找到最佳工具,请查看此网络抓取工具列表,这些工具可以帮助您有效地从各种网站提取所需信息。
  • 可以使用 Internet Explorer 执行抓取。
  • Internet Explorer 的抓取过程较慢;但是,它能为用户提供所需的结果。
  • 进行抓取时应格外小心谨慎,因为它可能会损害和损坏用于抓取的系统。