使用 VBA 进行网络抓取
什么是数据抓取?
数据抓取是一种技术,可帮助将 HTML 网页中的所需信息提取到本地计算机上的本地文件中。通常,本地文件可以是 Excel 文件、Word 文件或任何 Microsoft Office 应用程序。它有助于传输网页中的关键信息。
当日常工作涉及研究项目时,数据抓取会变得简单,而此类项目完全依赖于互联网和网站。为了进一步说明这一点,让我们以日内交易者为例,他运行一个 Excel 宏,使用 VBA 从财经网站中提取市场信息并将其放入 Excel 工作表中。
使用 Internet Explorer 进行数据抓取前如何准备 Excel 宏?
在 Excel 中进行数据抓取之前,Excel 宏文件需要执行某些前提条件。
这些先决条件如下:–
步骤 1) 打开基于 Excel 的宏,并访问 Excel 的开发者选项。
步骤 2) 在“开发工具”选项卡下选择“Visual Basic”选项。
步骤 3) 插入新模块。
步骤 4) 初始化新的子程序
Sub test() End sub
模块将显示如下:–
步骤 5) 访问“工具”选项卡下的“引用”选项,并引用 Microsoft HTML Object Library 和 Microsoft Internet Controls。
以下文件需要引用到模块中,因为它们有助于打开 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
模块将显示如下:–
如何使用 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 执行宏。将打开以下网页,如图所示
现在,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 模块。将按钮标记为“刷新”或任何合适的名称。在此示例中,按钮被初始化为“刷新”。
步骤 5) 按刷新按钮以获得以下输出
步骤 6) 比较 Excel 中的结果与 Internet Explorer 中的结果
摘要
- 数据抓取允许用户仅抓取用户想要的信息。要为此目的找到最佳工具,请查看此网络抓取工具列表,这些工具可以帮助您有效地从各种网站提取所需信息。
- 可以使用 Internet Explorer 执行抓取。
- Internet Explorer 的抓取过程较慢;但是,它能为用户提供所需的结果。
- 进行抓取时应格外小心谨慎,因为它可能会损害和损坏用于抓取的系统。