使用 VBA 进行网页抓取
什么是数据抓取?
数据抓取是一种技术,有助于将所需信息从 HTML 网页提取到本地机器上的本地文件中。通常,本地文件可以对应于 excel 文件、word 文件,或者说任何 Microsoft 办公应用程序。它有助于从网页传递关键信息。
当每天从事基于研究的项目时,数据抓取变得简单,这样的项目完全依赖于互联网和网站。为了进一步说明这个主题,让我们以日内交易员为例,他运行一个 excel 宏,使用 VBA 将金融网站上的市场信息提取到 excel 表中。
如何在使用 Internet Explorer 执行数据抓取之前准备 Excel 宏?
在开始 Excel 数据抓取过程之前,必须对 Excel 宏文件执行某些先决条件。
这些先决条件如下:-
步骤1) 打开基于 Excel 的宏并访问 Excel 的开发人员选项。
步骤2) 选择开发人员功能区下的 Visual Basic 选项。
步骤3) 插入新模块。
步骤4) 初始化新子程序
Sub test() End sub
该模块的结果如下:–
步骤5) 访问工具选项卡下的参考选项并参考 Microsoft HTML 对象库和 Microsoft 網絡控制。
以下文件将引用该模块,因为它有助于打开 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,请写入 即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) 按下 Control + 访问以下 HTML 源代码 Shift +我
<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")
可以使用 excel 工作表的 range 属性或通过 excel 工作表的 cells 属性初始化 excel。为了降低 VBA 脚本的复杂性,将集合数据初始化为工作簿中存在的 sheet 1 的 excel cells 属性。
宏脚本准备好后,将子程序传递并分配给 excel 按钮,然后退出 VBA 模块。将按钮标记为刷新或可以初始化的任何合适名称。在此示例中,按钮被初始化为刷新。
步骤5) 按刷新按钮获取以下输出
步骤6) 将 Excel 中的结果与 Internet Explorer 中的结果进行比较
结语
- 数据抓取允许用户仅抓取用户想要的信息。要找到用于此目的的最佳工具,请查看此网络抓取工具列表,这些工具可帮助您有效地从各个网站提取所需信息。
- 可以使用 Internet Explorer 进行抓取。
- 在 Internet Explorer 中,抓取过程较慢;但是,它能够向用户提供所需的结果。
- 抓取操作应绝对小心谨慎,因为它可能会损坏和破坏用于抓取的系统。