簡體   English   中英

如何從帶有 VBA 的 HTML 標簽中提取值以用於 Excel?

[英]How to extract values from HTML tags with VBA to use in Excel?

片段摘要:(第一個li-tag打開顯示內容,其他li-tag相同,只是dd-tags中的值不同。

 <body id=“WEBSITE“> <div> id="layout" class=" MAIN SECTION "</div> <main> <ul id=“RESULTS“> <li class="content" style="position:relative;"> <dl> <dt class="first">HEAD01:</dt> <dd>VALUE01</dd> <dt class="first"> HEAD02:</dt> <dd> VALUE02</dd> <dt class="first"> HEAD03:</dt> <dd> VALUE03</dd> <dt class="first"> HEAD04:</dt> <dd> VALUE04</dd> </dl> </li> <li class="content" style="position:relative;">… </li> <li class="content" style="position:relative;">… </li> <li class="content" style="position:relative;">… </li> <li class="content" style="position:relative;">… </li> </ul> </main> </body>

li-tag包含一個 object 的不同屬性,每個具有相同的標題 HEAD01、02、03 和 04(在“dt”下),每個 li-tag 中的 VALUE 不同(在“dd”下)。 我沒有成功提取標簽中的 VALUE,使得它們在 Excel 中列為相應 header 下的列值,即 ZC1D81AF58358910DED8FDCZ 表中 HEAD01 下的所有 li.dd-tags 中的 Value01。

我的代碼:

Public Sub GetData()

    Const url = "URL"
    Dim html As New HTMLDocument, Htmldoc As New HTMLDocument
    Dim RecsCnt As Object, x As Long
       
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False
        .send
        html.body.innerHTML = .responseText
    End With
                                   
     Set RecsCnt = html.querySelectorAll("li")
    'Set RecsCnt = html.querySelectorAll("dl")
    
    With ActiveSheet

       For x = 0 To RecsCnt.Length - 1
        .Cells(x + 2, 2) = html.querySelectorAll("dd").Item(0).innerText
       Next
        
    End With

End Sub

有沒有人有一個有效的想法? 謝謝

這應該為您提供所需的數據 - 您只需要使用格式化:

Sub Get_Text_from_website()

Dim IE As New InternetExplorer
With IE
    .Visible = True
    .navigate "https://versteigerungspool.de/amtsgericht/celle.92437/suche"
    While .Busy Or .readyState < 4: DoEvents: Wend
    Dim j As Long
    Dim element As Object, i As Long
    Set dtElements = IE.document.getElementsByTagName("dt")
    Set ddElements = IE.document.getElementsByTagName("dd")

    For Each element In dtElements
        ActiveSheet.Cells(i + 1, 1) = element.innerText
        i = i + 1
    Next

    For Each element In ddElements
        ActiveSheet.Cells(j + 1, 2) = element.innerText
        j = j + 1
    Next

    IE.Quit
End With

結束子

如果 html 如圖所示,使用 id 和 class 會得到更快的結果; 您可以檢索標題並鏈接 nextSibling 以移動到相鄰元素。 請注意:這是為標題 + 1 行運行的設置。 如果還有更多,請更新 html 以反映這一點。

Option Explicit

Public Sub GetData()

    Const URL = "URL"
    Dim html As MSHTML.HTMLDocument, x As Long
       
    Set html = New MSHTML.HTMLDocument
    
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .send
        html.body.innerHTML = .responseText
    End With

    With html.querySelectorAll("#RESULTS .first")
        
        For x = 0 To .Length - 1
            ActiveSheet.Cells(1, x + 1) = .Item(x).innerText
            ActiveSheet.Cells(2, x + 1) = .Item(x).NextSibling.NextSibling.innerText
        Next
        
    End With

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM