vba - 从网站提取数据到excel错误
问题描述
我在设置从网站到 Excel 的数据提取时遇到了困难。我想提取产品的确切价格以脱颖而出。到目前为止,我有这个代码:
Sub GetData()
Dim objIE As InternetExplorer 'Microsoft Internet Controls library added
Dim itemEle As Object
Dim data As String
Dim y As Integer
Set objIE = New InternetExplorer
objIE.Visible = True
objIE.navigate "https://www.nay.sk/samsung-ue55nu7172"
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
y = 1
For Each itemEle In objIE.document.getElementsByClassName("price")
data = itemEle.getElementsByClassName("price")(0).innerText
y = y + 1
Next
data = Range("A1").Value
End Sub
你有什么建议?
解决方案
你想要每一个价格吗?
例如,您可以通过以下方式列出前两个:
Option Explicit
Public Sub GetInfo()
Dim sResponse As String, i As Long, html As New HTMLDocument
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.nay.sk/samsung-ue55nu7172", False
.send
sResponse = StrConv(.responseBody, vbUnicode)
End With
sResponse = Mid$(sResponse, InStr(1, sResponse, "<!DOCTYPE "))
Dim titles As Object, prices As Object
With html
.body.innerHTML = sResponse
Set titles = .querySelectorAll(".title")
Set prices = .querySelectorAll(".price")
End With
For i = 0 To 1
Debug.Print titles(i).innerText & prices(i).innerText
Next i
End Sub
该循环返回您这些:
实际上,页面上的所有元素都带有一个price
存储在对象中的类prices
。
您可以通过循环该对象/节点列表的长度来查看所有价格:
For i = 0 To prices.Length - 1
Debug.Print Prices.item(i).innerText
Next i
同样,您可以循环.Length
oftitles
但请注意它的长度与prices
. 页面上有更多价格(或者更确切地说,具有price
类的元素与具有类的元素title
。
参考资料(VBE>工具>参考资料):
- HTML 对象库
推荐阅读
- python - 有条件的数据框行复制
- algorithm - Algorithm for converting fraction to binary
- reactjs - 构建应用程序后出错 - 位置 0 处的 JSON 中的意外令牌 <
- macos - mariaDB 客户端 - 加载错误版本的 openssl
- html - 嵌套的 div 标签彼此之间没有完全对齐
- reactjs - 带有布尔道具的 ReactJS 三元运算符
- ibm-doors - 有没有办法删除 DXL 布局列中的文本?
- python - 如何检查手头的值是否在某些 PySpark 数据帧的特定列中?
- flutter - Flutter:动态平台图标
- c# - 无法忽略更新数据库中的类类型