Vba 我如何从房产税网站上获取数据

Vba 我如何从房产税网站上获取数据,vba,web-scraping,Vba,Web Scraping,我想从这一页上删掉一些东西 我想要属性表下的属性ID 土地表下的平方英尺和市场价值 改进1正在改进/建设中 遇到了一些问题 我找不到任何elementID或标记/类名的组合来提取此信息 同上 我只想拉列表中的第一项,而将0添加到下面代码中的多个点并不能实现这一点 我在想,最好的方法是制作一个子进程HTMLPage ProcessHTMLPage 2和ProcessHTMLPage 3来完成所有这些,然后我可以根据需要进行格式化,将它们放入适当的列中 Sub GetHTMLDocumentXML(

我想从这一页上删掉一些东西

我想要属性表下的属性ID 土地表下的平方英尺和市场价值 改进1正在改进/建设中 遇到了一些问题

我找不到任何elementID或标记/类名的组合来提取此信息 同上 我只想拉列表中的第一项,而将0添加到下面代码中的多个点并不能实现这一点 我在想,最好的方法是制作一个子进程HTMLPage ProcessHTMLPage 2和ProcessHTMLPage 3来完成所有这些,然后我可以根据需要进行格式化,将它们放入适当的列中

Sub GetHTMLDocumentXML()

    Dim XMLPage As New MSXML2.XMLHTTP60
    Dim HTMLDoc As New MSHTML.HTMLDocument
    Dim HTMLPage As MSHTML.HTMLDocument
    Dim URL As String
    Dim HTMLDiv As MSHTML.IHTMLElement
    Dim HTMLTable As MSHTML.IHTMLElement


    XMLPage.Open "GET", "http://bexar.trueautomation.com/clientdb/Property.aspx?cid=110&prop_id=1229623", False
    XMLPage.send

    If XMLPage.Status <> 200 Then
        MsgBox XMLPage.Status & " - " & XMLPage.statusText
        Exit Sub
    End If

    HTMLDoc.body.innerHTML = XMLPage.responseText

    ProcessHTMLPage2 HTMLDoc

End Sub

Sub ProcessHTMLPage2(HTMLPage As MSHTML.HTMLDocument)

    Dim HTMLTable As MSHTML.IHTMLElement
    Dim HTMLTables As MSHTML.IHTMLElementCollection
    Dim HTMLRow As MSHTML.IHTMLElement
    Dim HTMLCell As MSHTML.IHTMLElement
    Dim RowNum As Long, ColNum As Integer

    Set HTMLTables = HTMLPage.getElementsByClassName("improvements")

    Cells.Clear

    For Each HTMLTable In HTMLTables

        Debug.Print HTMLTable.className
        RowNum = RowNum + 1

        For Each HTMLRow In HTMLTable.getElementsByTagName("tr")
            Debug.Print vbTab & HTMLRow.innerText
            ColNum = 1


            For Each HTMLCell In HTMLRow.Children
                Debug.Print vbTab & HTMLCell.innerText
                Cells(RowNum, ColNum) = HTMLCell.innerText
                ColNum = ColNum + 1

            Next HTMLCell

        Next HTMLRow
    Next HTMLTable

    Range("A1").Select
    ActiveCell.CurrentRegion.EntireColumn.AutoFit
End Sub
尝试以下方法从该网页获取房产ID、Sqft和市场价值。我不得不使用硬编码索引来定位最后两个元素,因为我找不到任何特定的标记

Public Sub FetchInfo()
    Const Url$ = "http://bexar.trueautomation.com/clientdb/Property.aspx?cid=110&prop_id=1229623"
    Dim S$, oItem As Object
    Dim propertyId$, Sqft$, marketValue$

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", Url, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
        .send
        S = .responseText
    End With

    With CreateObject("HTMLFile")
        .write S
        For Each oItem In .getElementsByTagName("td")
            If InStr(oItem.innerText, "Property ID:") > 0 Then
                propertyId = oItem.NextSibling.innerText
                Exit For
            End If
        Next oItem

        Sqft = .getElementById("landDetails").getElementsByTagName("td")(4).innerText
        marketValue = .getElementById("landDetails").getElementsByTagName("td")(7).innerText

        Debug.Print propertyId, Sqft, marketValue
    End With
End Sub

这段代码对我起到了推动改进的作用。因为*我只想提取列表*中的第一项*似乎是您唯一真正的问题,所以只需在HTMLRow.Children循环中为每个HTMLCell添加一个计数器来制造第一项,该循环在第一次迭代后停止。做循环直到i=1Scott谢谢您的快速回复!很抱歉,我希望能够在Property表下提取Property ID:,在Land表下提取Sqft和Market Value,但我似乎无法找出实现这一点的elementID类名或标记名执行CellsRowNum,ColNum=HTMLCell.innerText i=i+1循环,直到i=1 ColNum=ColNum+1```使我的工作簿崩溃,它将改进1:转化为A1,然后崩溃此操作非常有效,我添加了以下内容来获取我需要的其他信息:live=.getElementByIdimprovementBuildingDetails.GetElementsByTagNamed2.innerText值=.getElementByIdimprovementBuildingDetails.GetElementsByTagNamed3.innerText,然后将所有变量放入单元格中,谢谢,如果您不介意,请回答更多问题,如果财产ID在1000000到1230000之间,或者你认为这会把excel推得太远,那么在一堆网站上循环这个问题是否足够容易?