【发布时间】:2020-06-18 04:55:47
【问题描述】:
我想从这个页面上刮一些东西http://bexar.trueautomation.com/clientdb/Property.aspx?cid=110&prop_id=1229623
- 我想要属性 ID:在属性表下
- 土地表下的平方英尺和市场价值
- 改进/建筑下的改进 #1
遇到一些问题
- 我找不到任何 elementID 或标签/类名称的组合来提取此信息
- 同上
- 我只想提取列表中的第一项并将 (0) 添加到下面代码中的多个位置并不能实现这一点
我在想最好的方法是创建一个子 ProcessHTMLPage ProcessHTMLPage2 和 ProcessHTMLPage3 来完成所有这些,然后我可以处理格式以根据需要将它们放入适当的列中
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
【问题讨论】:
-
代码对我有用,可以帮助我进行改进。由于*我只想提取列表中的第一项 * 似乎是您唯一真正的问题,只需通过在第一次迭代后停止的
For Each HTMLCell In HTMLRow.Children循环中添加一个计数器来制造第一项。Do ... Loop Until i = 1 -
斯科特感谢您的快速回复!抱歉,我希望能够提取 Property ID:在 Property 表下以及 Land Table 下的 Sqft 和 Market Value,但我似乎无法弄清楚可以完成此操作的 elementID 类名或标签名。 ``` Do Cells(RowNum, ColNum) = HTMLCell.innerText i = i + 1 Loop until i = 1 ColNum = ColNum + 1 ``` 使我的工作簿崩溃,它将改进 #1: 放入 A1 然后崩溃
标签: vba web-scraping