抓取html数据Vba

问题描述 投票:0回答:2

我想制作一个从网站的一部分提取数据的函数。

以下是 HTML 站点。 HTML 代码

函数代码

Function GetElementById(url As String, id As String, Optional isVolatile As Boolean)
    Application.Volatile (isVolatile)
    On Error Resume Next
    Dim html As Object, objResult As Object
    ret = GetPageContent(url)
    Set html = CreateObject("htmlfile")
    html.Body.innerHtml = ret
    Set objResult = html.GetElementById(id)
    GetElementById = objResult.innerHtml
End Function

我需要只提取类“panel-body” 直接进入函数。我认为应该是.children (3)。这是正确的吗?

这样既实用又快速,因为我需要提取超过 50 个站点。

excel vba web-scraping getelementbyid
2个回答
0
投票

我至少看到两个选择。

  1. 一旦你有了 id=Result 的 HTMLDivElement,你就可以简单地获取子元素。请首先执行 objResult.Children(2) 并检查返回的元素是什么来测试这一点。

    objResult.Children(2).Children(0).Children(0)

  2. 第二个是,在更高版本的 MSHTML 中,我认为安装了 IE8 或更高版本后,您可以使用“GetElementsByClassName”方法,这将返回 IHTMLElements 的集合。 如果 HTMLDocument 只有 1 个“panel-body”,那么您很幸运。 如果没有,您需要遍历每一项并检查其他一些独特功能才能知道您拥有正确的功能。


0
投票

为此作业生成代码的另一种方法是录制宏,然后在录制的宏周围添加一个循环,循环遍历 50 个页面并获取结果。

功能区的数据选项卡上有一个从外部源获取数据的选项。如果您使用它,它会给您一个点击界面,让您选择您要寻找的桌子。在执行此操作时记录一个宏,它会为您生成代码。

© www.soinside.com 2019 - 2024. All rights reserved.