我正在尝试使用 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