Selenium VBA Excel 教程:Chrome 网页抓取示例
什么是使用 selenium 进行数据抓取?
Selenium 可以归类为自动化工具,有助于从 HTML 网页中抓取信息,利用 Google Chrome 进行网页抓取。
如何在执行数据抓取之前准备 Excel 宏 Selenium?
在开始 Excel 数据抓取过程之前,必须对 Excel 宏文件执行某些先决条件。
这些先决条件如下:-
步骤1) 打开基于 Excel 的宏并访问 Excel 的开发人员选项。
步骤2) 选择开发人员功能区下的 Visual Basic 选项。
步骤3) 插入新模块。
步骤4) 初始化一个新的子程序并将其命名为test2。
Sub test2() End sub
该模块的结果如下:-
步骤5) 访问工具选项卡下的参考选项并参考 Selenium 类型库。以下库将被引用到模块,因为它有助于打开谷歌浏览器并促进宏脚本的开发。
现在 Excel 文件已准备好与 Internet Explorer 交互。下一步是合并一个宏脚本,以便于在 HTML 中抓取数据。
怎么开 Google Chrome 使用 VBA?
以下是打开的步骤 Google Chrome 使用 VBA
步骤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 执行宏。
谷歌浏览器将会打开以下网页
Sub test2() Dim driver as new webdriver Dim rowc, cc, columnC as integer Driver.start "Chrome" Driver.get "http://demo.guru99.com/test/web-table-element.php" Application.Wait Now+Timevalue("00:00:20") End sub
现在 excel 宏已准备好执行抓取任务。下一步将显示如何通过应用 selenium 和 VBA 提取信息。
如何使用 VBA 从网站抓取信息?
假设日内交易者想要每天从网站访问数据。每次日内交易者点击按钮时,系统都会自动将市场数据提取到 Excel 中。
从上面的网站,需要检查一个元素并观察数据的结构。按 Control + 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>
源代码如下:-
可以看出,数据被构造为单个 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 "http://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"http://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"http://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 可以归类为自动化工具,有助于从 HTML 网页中抓取信息,利用 Google Chrome 进行网页抓取。
- 互联网上的抓取应谨慎进行。
- 抓取信息通常是违反网站条款的。
- 当通过 selenium 进行抓取时,它会提供多种浏览器支持。
- 换句话说,爬虫可以执行类似的爬取任务 Firefox, Internet Explorer 也是如此。