【问题标题】:Scrape html data Vba抓取html数据Vba
【发布时间】:2016-02-13 03:34:20
【问题描述】:

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

以下是 HTML 网站。 HTML code.

函数代码

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

我只需要提取“面板主体”类 直接进入函数。我认为应该是 .children (3)。对吗?

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

【问题讨论】:

    标签: vba excel web-scraping getelementbyid scrape


    【解决方案1】:

    我看到至少两个选项。

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

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

    2. 第二个是在更高版本的 MSHTML 中,我认为安装了 IE8 或更高版本的您有方法“GetElementsByClassName”,这将返回 IHTMLElements 的集合。如果 HTMLDocument 只有 1 个“面板主体”,那么您很幸运。如果不是,您将需要遍历每一个并检查其他一些独特的功能,以了解您是否拥有正确的功能。

    【讨论】:

    • 我尝试了两种方法,(1)没有结果 Set objResult = html.GetElementById(id) GetElementById = objResult.Children(2).Children(0).Children(0).innerHTML ( 2)结果为0 Set objResult = html.GetElementById(id) GetElementById = objResult.Children(2).innerHTML
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 2017-06-16
      • 1970-01-01
      • 2016-05-19
      • 2018-01-05
      相关资源
      最近更新 更多