【问题标题】:How to pull <tspan> elements from HTML code in VBA webscraping如何在 VBA 网页抓取中从 HTML 代码中提取 <tspan> 元素
【发布时间】:2019-06-12 00:04:09
【问题描述】:

我正在尝试使用带有 VBA 的 HTML 网页抓取从网页中提取数据。我在其他网站上取得了成功,但是这个网站在标记为 tspan 的代码行中有数据,我似乎无法从中获取数据。

HTML 代码如下所示(抱歉,代码很长,不确定什么是相关的,什么不相关):

<div class="Classname">
    <svg width ="100%" height="100%" fill="code" stroke="100%" stroke="code" viewBox="numbers" class="undefined">
         <polygon fill="transparent" points="numbers"></polygon?
             <text y="100" dy="#s">
                <tspan x="100" text-anchor="middle">1</tspan>

我想要的值是之前最后一行的 1。在导航到正确的网页等后,我用来提取它的代码是:

Dim text As String
text=IE.document.GetElementsByClassname("Classname")(0).GetElementsByTagname("tspan")(0).innertext

我还尝试了类名“未定义”的位置,因为它出现在 svg 代码行中。无论哪种方式,我都会收到错误 91。

编辑:我现在尝试了嵌套的 GetElementsByTagName,仍然出现错误

text=IE.document.GetElementsByClassname("C")(0).GetElementsByTagname("svg")(0).GetElementsByTagname("polygon")(0).GetElementsByTagname("text")(0).GetElementsByTagname("tspan")(0).innertext

【问题讨论】:

  • 最重要的问题是,如果您是 100%,在尝试使用其元素之前,毫无疑问地确定网页已完全加载
  • 我有一个内置的 readystate 完整循环,它也适用于其他应用程序。
  • 可以提供网址吗?
  • tipranks.com/stocks/mmm/stock-analysis我正在尝试拉“智能得分”评级,左上角的大数字
  • 已解决。类名有一个下划线,实际上是 2 个下划线。 __ vs _,很难区分。嵌套的 getelementsbytagname 成功了。

标签: html excel vba web-scraping


【解决方案1】:

这里有更直接更快捷的方法

Option Explicit
Public Sub GetData()
    Dim ie As Object
    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Visible = True
        .Navigate2 "https://www.tipranks.com/stocks/mmm/stock-analysis"

        While .Busy Or .readyState < 4: DoEvents: Wend
        Do 'could use timed loop here to handle infinite looping risk
            Set elem = .document.querySelectorAll("tspan")
        Loop While elem.Length = 0
        Debug.Print elem.item(0).innerText
        .Quit
    End With
End Sub

【讨论】:

    【解决方案2】:

    解决了。类名有一个下划线,实际上是 2 个下划线。 __ vs _,很难区分。嵌套的 getelementsbytagname 成功了。

    【讨论】:

      【解决方案3】:

      或者,您也可以使用 querySelector 方法...

      text = IE.document.querySelector("tspan[text-anchor='middle']").innerText
      

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-12
        • 2021-01-07
        • 2019-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        • 1970-01-01
        相关资源
        最近更新 更多