VBA HTML Scraping - ' .innertext'从复杂的表

时间:2016-03-03 19:52:15

标签: vba excel-vba parsing web-scraping xmlhttprequest

所有

我创建了以下模块,从以下地址中删除单个价值(伦敦房价变化1m%):

https://www.hometrack.com/uk/insight/uk-cities-house-price-index/

特定值嵌套在以下代码中:

Please see highlighted Row

以下VBA代码是我尝试抓取的。我,也许是错误的,觉得我非常接近捕获价值 - 但代码不起作用。

有谁知道我在哪里错了?它不会显示错误消息,但也不会输出任何值。

 Sub HousePriceData()
        Dim wb As Workbook
        Dim ws As Worksheet
        Dim TxtRng As Range
        Dim ie As Object
        Dim V As Variant
        Dim myValue As Variant

        Set ie = CreateObject("INTERNETEXPLORER.APPLICATION")
        ie.NAVIGATE "https://www.hometrack.com/uk/insight/uk-cities-house-price-index/"
        ie.Visible = False

        While ie.ReadyState <> 4
            DoEvents
        Wend

        Set wb = ActiveWorkbook 
        Set ws = wb.Sheets("Input") 
        Set TxtRng = ws.Range("C15") 

        Set myValue = ie.document.getElementById("cities-index-table").getElementsByTagName("tr")(7).g‌​etElementsByTagName("td")(5) 

        TxtRng = myValue.innerText 
        End Sub

2 个答案:

答案 0 :(得分:3)

尝试使用XHR和原始解析而不是笨拙的IE

Sub Test()

    Dim strUrl As String
    Dim strTmp As String
    Dim arrTmp As Variant

    strUrl = "https://www.hometrack.com/uk/insight/uk-cities-house-price-index/"
    With CreateObject("MSXML2.XMLHttp")
        .Open "GET", strUrl, False
        .Send ""
        strTmp = .ResponseText
    End With
    arrTmp = Split(strTmp, ">London</a></td>", 2)
    strTmp = arrTmp(1)
    arrTmp = Split(strTmp, "<td>", 7)
    strTmp = arrTmp(6)
    arrTmp = Split(strTmp, "</td>", 2)
    strTmp = arrTmp(0)

    ThisWorkbook.Sheets("Input").Range("C15").Value = strTmp

End Sub

答案 1 :(得分:0)

尝试使用此

Dim Engmt As String

Engmt = "ERRORHERE"
On Error Resume Next
Engmt = Trim(ie.document.getElementById("cities-index-   table").getElementsByTagName("tr")(12).g‌​etElementsByTagName("td")(4).innerText)
On Error GoTo 0
If Engmt = "ERRORHERE" Then
TxtRng.Value = "ERROR"
Else
TxtRng.Value = Engmt
End If