vba 网页数据抓取(如何在使用VBA进行数据抓取之前准备Excel宏?教程)

优采云 发布时间: 2021-11-11 04:16

  vba 网页数据抓取(如何在使用VBA进行数据抓取之前准备Excel宏?教程)

  公众号-IT旅行者,专注分享IT相关知识!关注我,成就最好的自己!

  什么是使用 Selenium 进行数据抓取?

  Selenium 可以归类为一种自动化工具,它有助于从 HTML 网页中抓取信息,以便使用 Google Chrome 执行网页抓取。

  在本教程中,您将学习:

  在使用 Selenium 进行数据捕获之前如何准备 Excel 宏?

  在 EXCEL 中进入数据采集流程之前,必须对 EXCEL 宏文件执行某些先决条件。

  这些先决条件如下:-

  步骤 1) 打开基于 Excel 的宏并访问 EXCEL 的开发人员选项。

  

  步骤 2) 选择开发人员功能区下的 Visual Basic 选项。

  

  步骤 3) 插入一个新模块。

  

  步骤 4) 初始化一个新的子程序并将其命名为 test2。

  Sub test2()

End sub

  以下是本单元的结果:

  

  步骤 5) 访问 Tool 选项卡下的 Reference 选项,并引用 Selenium 类型库。下面的库会引用这个模块,因为它有助于打开谷歌浏览器,方便宏脚本的开发。

  

  现在,Excel 文件已准备好与 Internet Explorer 交互。下一步将合并一个宏脚本,以方便在 HTML 中抓取数据。

  如何使用 VBA 打开谷歌浏览器?

  以下是使用VBA打开谷歌浏览器的步骤

  步骤1)声明并初始化子程序中的变量,如下图

  Sub test2()

Dim driver as new webdriver

Dim rowc, cc, columnC as integer

  步骤 2) 要使用 Selenium 和 VBA 打开 Google Chrome,请编写驱动程序。启动“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://itxiaonv.com/"

Application.Wait Now+Timevalue("00:00:20")

End sub

  

  现在,EXCEL 宏已准备好执行爬网任务。下一步将展示如何通过应用 Selenium 和 VBA 来提取信息。

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

  假设日内交易者希望每天访问 网站 上的数据。日内交易者每次按下按钮,应自动将市场数据拉至EXCEL。

  从上面的网站来看,有必要检查元素,观察数据的结构。按 Ctrl+Shift+I

  访问以下 HTML 源代码

  

Company

Group

Pre Close (Rs)

Current Price (Rs)

% Change

  源码如下:-

  如您所见,数据被组织到一个 HTML 表格中。因此,为了从HTML表格中提取全部数据,需要设计一个宏来提取标题信息,执行如下图所示的任务:

  步骤 1) 制定一个 for 循环,将 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://itxiaonv.com/"

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

  Step2) 接下来,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://itxiaonv.com/"

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可以通过EXCEL表格的Range属性进行初始化,也可以通过EXCEL表格的cell属性进行初始化。为了进一步降低复杂度,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://itxiaonv.com/"

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模块。在本例中,按钮被初始化为 REFRESH。

  

  步骤4)按刷新按钮得到下面提到的输出

  

  步骤5)将excel中的结果与谷歌浏览器中的结果进行比较。

  

  总结:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线