如何拉动<;tspan>;VBA webscraping中HTML代码中的元素

如何拉动<;tspan>;VBA webscraping中HTML代码中的元素,html,excel,vba,web-scraping,Html,Excel,Vba,Web Scraping,我正在尝试使用HTML webscraping和VBA从网页中提取数据。我在其他网站上也取得了成功,但这一个网站的数据在标记为tspan的代码行中,我似乎无法从中获取数据 HTML代码如下所示(抱歉代码太长,不确定什么是相关的,什么是不相关的): 我还尝试了类名在svg代码行中显示为“未定义”的情况。不管怎样,我都会犯错误 编辑:我现在已经尝试了嵌套的GetElementsByTagName,但仍然出现错误 text=IE.document.GetElementsByClassname("C")

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

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

我还尝试了类名在svg代码行中显示为“未定义”的情况。不管怎样,我都会犯错误

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

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

解决了。类名有一个下划线,实际上是2个下划线很难说有什么区别。嵌套的getelementsbytagname成功了。

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

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

希望这有帮助

这里有一个更直接、更快捷的方法

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
选项显式
公共子GetData()
模糊的物体
设置ie=CreateObject(“InternetExplorer.Application”)
与ie
.Visible=True
.导航2“https://www.tipranks.com/stocks/mmm/stock-analysis"
当.Busy或.readyState<4:DoEvents:Wend时
Do’可以在这里使用定时循环来处理无限循环风险
Set elem=.document.querySelectorAll(“tspan”)
元素长度为0时循环
调试.打印元素项(0).innerText
退出
以
端接头

最重要的问题是,如果您100%确信网页在尝试使用其元素之前已完全加载?我有一个内置的readystate完整循环,该循环也适用于其他应用程序。您能提供url吗?我试图拉“聪明分数”评级,左上角的大数字解决了。类名有一个下划线,实际上是2个下划线很难说有什么区别。嵌套的getelementsbytagname实现了这一点。
text = IE.document.querySelector("tspan[text-anchor='middle']").innerText
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