首页 > 解决方案 > 数据抓取不同的资产类别数据

问题描述

我正在尝试编写一些代码来抓取不同的资产类别数据。用户输入他们想要获取信息的股票名称,然后代码获取该特定股票的相关定量数据。

我在想 VBA,因为它很容易将数据输出到 Excel 电子表格中。但是如果更容易的话,我对其他语言持开放态度(我知道一点 Python)。

我遇到的问题是似乎没有任何独特的标签可供查看,然后才能访问我想要的数据表。

例如,我可以GetElementsByClassName("clear"),但其中许多存在。我想也许我可以访问表类名本身。我对此有两个问题:

1):我无法让它在 VBA 中工作,因为它似乎不喜欢这个类名的空格

2):即使我让它工作,我也不知道over stock的类名是否相同......

任何建议都非常感谢。这是我最复杂的 VBA 项目。

标记示例

标签: excelvbaweb-scraping

解决方案


我无法让它在 VBA 中工作,因为它似乎不喜欢这个类名的空格

该元素有 3 个类;CSS 类中没有空格。

你可以GetElementsByClassName("companyFinancialSumaryTbl"),这会给你一个包含<table>元素的节点集合,大概是第一个也是唯一的项目。

从那里你可以得到<tbody>子元素,然后你可以迭代它的子元素,<tr>并且在每一行你可以迭代<td>子节点;当 a<td>bold课程时,您知道您正在查看行标题。

即使我让它工作,我也不知道overstocks的类名是否相同......

我们也不知道!如果有另一个表要从中读取数据,它可能没有companyFinancialSummaryTbl类,可能有一些overstocksTbl类;无论哪种方式,它将是一个<table>带有子节点的元素,您可以导航和迭代。

我对网络抓取不是很熟悉,但是假设你<table>在 object 中有元素e,那么你可以想象得到这样的<tbody>元素:

Dim thead As Object
Set thead = e(0)

Dim tbody As Object
Set tbody = e(1)

如果可行,那么这也应该:

Dim tr As Object
For Each tr In tbody
    Dim td As Object
    For Each td In tr
        Debug.Print td,; ' comma prints a tab, semicolon skips printing the line break
    Next
    Debug.Print 'print the line break
Next

推荐阅读