Selenium VBA Excel 教程:Chrome 网络抓取示例
使用 Selenium 进行数据抓取是什么?
Selenium 可以归类为自动化工具,它通过利用 Google Chrome 从 HTML 网页抓取信息以执行网页抓取。
在使用 Selenium 执行数据抓取之前如何准备 Excel 宏?
在 Excel 中进行数据抓取之前,需要对 Excel 宏文件执行某些先决条件。
这些先决条件如下:
步骤 1) 打开基于 Excel 的宏并访问 Excel 的开发人员选项。
步骤 2) 在“开发人员”功能区下选择“Visual Basic”选项。
步骤 3) 插入新模块。
步骤 4) 初始化一个新子程序并将其命名为 test2。
Sub test2() End sub
模块中的结果如下:
步骤 5) 访问“工具”选项卡下的“引用”选项并引用 Selenium 类型库。以下库将被引用到模块中,因为它有助于打开 Google Chrome 并促进宏脚本的开发。
现在,Excel 文件已准备好与 Internet Explorer 交互。接下来的步骤是整合一个宏脚本,以促进 HTML 中的数据抓取。
如何使用 VBA 打开 Google Chrome?
以下是使用 VBA 打开 Google Chrome 的步骤
步骤 1) 如下所示在子程序中声明并初始化变量
Sub test2() Dim driver as new webdriver Dim rowc, cc, columnC as integer
步骤 2) 要使用 Selenium 和 VBA 打开 Google Chrome,请写入 driver.start “chrome” 并按 F5。
代码如下。
Sub test2() Dim driver as new webdriver Dim rowc, cc, columnC as integer Driver.start "Chrome" Application.Wait Now+Timevalue("00:00:20") End sub
模块将产生以下结果:
如何使用 VBA 在 Google Chrome 中打开网站?
一旦您能够使用 VBA 访问 Google Chrome,下一步就是整合使用 VBA 访问网站的功能。这通过 get 函数实现,其中 URL 必须作为双引号在属性中传递。
请按照以下步骤操作
模块将如下所示:
按 F5 执行宏。
如下所示,以下网页将在 Google Chrome 中打开
Sub test2() Dim driver as new webdriver Dim rowc, cc, columnC as integer Driver.start "Chrome" Driver.get "https://demo.guru99.com/test/web-table-element.php" Application.Wait Now+Timevalue("00:00:20") End sub
现在,Excel 宏已准备好执行抓取任务。下一步将展示如何通过应用 Selenium 和 VBA 提取信息。
如何使用 VBA 从网站抓取信息?
假设日间交易员希望每天从网站访问数据。每次日间交易员点击按钮时,它都应该自动将市场数据拉取到 Excel 中。
从上述网站,有必要检查元素并观察数据的结构。通过按 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>
源代码如下:
可以看出,数据被构造为单个 HTML 表格。因此,为了从 HTML 表格中提取所有数据,需要设计一个宏,该宏提取 HTML 表格的标题信息和与表格关联的相应数据。执行以下任务,如下所示:
步骤 1) 构建一个 for 循环,该循环作为集合遍历 HTML 标题信息。Selenium 驱动程序必须找到 HTML 表格的标题信息。为此,我们利用 FindElementByClass() 和 FindElementByTag() 方法执行任务,如下所示
VBA 模块将如下所示:
Sub test2() Dim driver As New WebDriver Dim rowc, cc, columnC As Integer rowc = 2 Application.ScreenUpdating = False driver.Start "chrome" driver.Get "https://demo.guru99.com/test/web-table-element.php" For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr") cc = 1 For Each t In th.FindElementsByTag("th") Sheet2.Cells(1, cc).Value = t.Text cc = cc + 1 Next t Next th
步骤 2) 接下来,Selenium 驱动程序将使用上述类似方法定位表格数据。您必须编写以下代码:
Sub test2() Dim driver As New WebDriver Dim rowc, cc, columnC As Integer rowc = 2 Application.ScreenUpdating = False driver.Start "chrome" driver.Get"https://demo.guru99.com/test/web-table-element.php" For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr") cc = 1 For Each t In th.FindElementsByTag("th") Sheet2.Cells(1, cc).Value = t.Text cc = cc + 1 Next t Next th For Each tr In driver.FindElementByClass("dataTable").FindElementByTag("tbody").FindElementsByTag("tr") columnC = 1 For Each td In tr.FindElementsByTag("td") Sheet2.Cells(rowc, columnC).Value = td.Text columnC = columnC + 1 Next td rowc = rowc + 1 Next tr Application.Wait Now + TimeValue("00:00:20") End Sub
VBA 模块将如下所示:
可以通过 Excel 工作表的 Range 属性或 Excel 工作表的 Cells 属性初始化 Excel。为了降低 VBA 脚本的复杂性,集合数据被初始化为工作簿中 Sheet 2 的 Excel Cells 属性。此外,Text 属性有助于获取放置在 HTML 标签下的文本信息。
Sub test2() Dim driver As New WebDriver Dim rowc, cc, columnC As Integer rowc = 2 Application.ScreenUpdating = False driver.Start "chrome" driver.Get"https://demo.guru99.com/test/web-table-element.php" For Each th In driver.FindElementByClass("dataTable").FindElementByTag("thead").FindElementsByTag("tr") cc = 1 For Each t In th.FindElementsByTag("th") Sheet2.Cells(1, cc).Value = t.Text cc = cc + 1 Next t Next th For Each tr In driver.FindElementByClass("dataTable").FindElementByTag("tbody").FindElementsByTag("tr") columnC = 1 For Each td In tr.FindElementsByTag("td") Sheet2.Cells(rowc, columnC).Value = td.Text columnC = columnC + 1 Next td rowc = rowc + 1 Next tr Application.Wait Now + TimeValue("00:00:20") End Sub
VBA 模块将如下所示:
步骤 3) 宏脚本准备好后,将子程序传递并分配给 Excel 按钮,然后退出 VBA 模块。将按钮标记为刷新或任何可以初始化给它的合适名称。在此示例中,按钮被初始化为刷新。
步骤 4) 按下刷新按钮以获得以下输出
步骤 5) 将 Excel 中的结果与 Google Chrome 中的结果进行比较
摘要
- Selenium 可以归类为自动化工具,它通过利用 Google Chrome 从 HTML 网页抓取信息以执行网页抓取。
- 互联网上的抓取应谨慎进行。
- 通常,抓取信息是违反网站条款的。
- 当通过 Selenium 进行抓取时,它提供多种浏览器支持。
- 换句话说,抓取工具也可以通过 Firefox、Internet Explorer 执行类似的抓取任务。