Ian*_*anG 5 html excel vba web-scraping
我正在使用 vba 从 HTML 中提取值,.getElementsByClassName但目前运气不佳。
我正在尝试从以下 HTML 中提取“20+”
<p class="delivery-stock">
<span class="delivery-stock-value">20+</span>
<span class="delivery-available f-bold f4">available for delivery:</span>
</p>
<p>
Run Code Online (Sandbox Code Playgroud)
到目前为止我使用的 VBA 是
sh01.Cells(r, 5) = HTML.getElementsByClassName("delivery-stock-value")(0).innertext
sh01.Cells(r, 5) = HTML.getElementsByClassName("delivery-stock-value")(0).value
Run Code Online (Sandbox Code Playgroud)
我也用这个delivery-stock类做了同样的事情。
delivery-stock-value&delivery-stock在 HTML 中只出现一次。
在此先感谢您的帮助。
这是一个小示例,它应该将文本返回到 Sheet1 中的单元格 A1。你想要的outerText财产。这仅用于演示目的,如果您希望它更快且更易于维护,请使用 Web 请求。
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub GetTheText()
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Sheet1")
Dim text As String
With CreateObject("internetexplorer.application")
.Navigate "https://www.toolstation.com/2-column-radiator/p39711"
Do While .Busy And .readyState <> 4:DoEvents:Loop
Sleep 1000 ' wait a little bit too
text = .document.getElementsByClassName("delivery-stock-value")(0).outerText
.Quit
End With
ws.Cells(1, 1).Value = text
End Sub
Run Code Online (Sandbox Code Playgroud)
如果可用,请使用 API。在这种情况下,您可以将股票代码传递到一个 API。这样更加高效、可靠。
使用 JSONParser(推荐):
如果您想要 JSON 解析器(例如jsonconverter.bas)的安全性,则如下所示。将 .bas 添加到项目后,转到 vbe > 工具 > 引用并添加引用Microsoft Scripting Runtime
Public Sub GetStock()
Dim json As Object
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.toolstation.com/api/products/39711/delivery?site=WW", False
.send
Set json = JsonConverter.ParseJson(.responseText)
End With
Debug.Print json("data")("channels")("delivery")("stock")
End Sub
Run Code Online (Sandbox Code Playgroud)
没有 JSON 解析器(不推荐):
Public Sub GetStock()
Dim sResponse As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.toolstation.com/api/products/39711/delivery?site=WW", False
.send
sResponse = .responseText
End With
Debug.Print Split(Split(sResponse, "stock" & Chr$(34) & ":")(1), ",")(0)
End Sub
Run Code Online (Sandbox Code Playgroud)