1

我正在尝试使用 VBA 网络抓取工具从 Zillow 中提取过去 24 个月内所有已售物业的数据,并将其粘贴为分析格式。我遇到的问题是:

1- 数据以 HTML 格式提取,因此被填充到单个单元格中。 我尝试 过首先尝试将毯子转换为 colluom 函数,但长度都是可变的,它有时还会切断地址之外的任何内容。B- 尝试复制并粘贴到 .txt 文件,但路径不断在某处中断,并非所有数据都成功了。

2-单击“下一页”按钮。 我尝试过 A-搜索 href 标签来创建下一个 url,不断返回为“Null”并打破链 B-使用 Css 选择器选择标题为“下一页”的 a 标签。我认为这是可行的,但它只是不断单击页面而不在第 1 页之后下载数据。

如果可以的话,可以加分: - 也下载链接href。请参阅第 2 点,因为每当我尝试获取 href 时,我都会得到 null。

使其基本 url 从 sheet1 上的单元格中提取,以便我可以使其更具动态性。每当我尝试时,它要么告诉我特定范围不是恒定的,要么是对象无效。

任何关于我做错了什么的帮助或澄清都会有所帮助!代码:


Option Explicit

Sub GetZillowSold()

    Dim XMLReq As New MSXML2.XMLHTTP60
    Dim HTMLDoc As New MSHTML.HTMLDocument
    
    Dim ListCards As MSHTML.IHTMLElementCollection
    Dim InfoCard As MSHTML.IHTMLElement
    
    Dim SoldList As MSHTML.IHTMLElementCollection
    Dim SoldDate As MSHTML.IHTMLElement
    
    Dim Zpages As MSHTML.IHTMLElementCollection
    Dim Zpage As MSHTML.IHTMLElement
    
    Dim CardID As Integer
    
    XMLReq.Open "GET", "https://www.zillow.com/the-colony-tx/sold/house_type/3-_beds/", False
    XMLReq.send
    
    If XMLReq.Status <> 200 Then
        MsgBox "Problem" & vbNewLine & XMLReq.Status & " - " & XMLReq.statusText
        Exit Sub
     End If
     
     Worksheets.Add
     Range("A1").Value = "Address"
     Range("b1").Value = "Price"
     Range("c1").Value = "Bedroom"
     Range("d1").Value = "Bath"
     Range("e1").Value = "Sqft"
     Range("f1").Value = "Date"
     Range("A2").Select
     
     HTMLDoc.body.innerhtml = XMLReq.responseText
     Set XMLReq = Nothing
    
     
     
      Set ListCards = HTMLDoc.getElementsByClassName("list-card-info")
      
         'Debug.Print ListCards.Length
       
       For Each InfoCard In ListCards
         ActiveCell.Value = InfoCard.innerText
         ActiveCell.Offset(1, 0).Select
         
       Next InfoCard
       
       Range("f2").Select
       Set SoldList = HTMLDoc.getElementsByClassName("list-card-top")
      'Debug.Print SoldList.Length,
    
      For Each SoldDate In SoldList
         ActiveCell.Value = Mid(SoldDate.innerText, 6)
         ActiveCell.Offset(1, 0).Select
     Next SoldDate
     
    Set Zpages = HTMLDoc.getElementsByTagName("a")
     
     For Each Zpage In Zpages
        If (Zpage.getAttribute("title") = "Next page") Then
        Zpage.Click
        End If
        Exit For
        Next Zpage
End Sub


4

0 回答 0