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