使用 Visual Basic 从 Internet Explorer 中提取 class 中的值
Extracting a value in a class from Internet Explorer using Visual Basic
使用此代码,我想从网站检索特定标签的值并将其放在我的电子表格中:
Sub get_tit()
Dim wb As Object
Dim doc As Object
Dim sURL As String
Dim lastrow As Long
lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
Set wb = CreateObject("internetExplorer.Application")
wb.navigate "https://www.tyre-shopper.co.uk/search/205-55-16/V/91"
Do While wb.Busy
Loop
Set doc = wb.document
Price = SelectNodes("#more-tyres > li:nth-child(4) > div > div.result-buy > form > span.tyre-price > div.tyre-price-cost.tyres-1 > strong")
Range("A5").Value = Price
End Sub
我尝试使用 CSS 到 select 的路径作为节点,但不能。
我也尝试从 class select 它,但它再次不起作用
这是网站上的代码,我想从中检索值 57.50
<span class="tyre-price">
Fully Fitted Price
<div class="tyre-price-cost tyres-1">
<strong>£57.50</strong>
</div><div class="tyre-price-cost tyres-2" style="display:none">
<strong>£115.00</strong>
</div><div class="tyre-price-cost tyres-3" style="display:none">
<strong>£172.50</strong>
</div><div class="tyre-price-cost tyres-4" style="display:none">
<strong>£230.00</strong>
</div><div class="tyre-price-cost tyres-5" style="display:none">
<strong>£287.50</strong>
</div>
</span>
根据 getElementsByClassName method but cycling through the collection returned by the getElementsByTagName method 直接提取元素并比较 class 属性 似乎效果不佳。
Sub get_tit()
Dim wb As Object
Dim doc As Object
Dim sURL As String
Dim lastrow As Long
Dim iDIV As Long, sPrice As Variant, sib As Long
Dim eSIB As IHTMLElement
lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
Set wb = CreateObject("internetExplorer.Application")
wb.Visible = True
wb.navigate "https://www.tyre-shopper.co.uk/search/205-55-16/V/91"
Do While wb.Busy And wb.readyState <> 4
DoEvents
Loop
Set doc = wb.document
With doc.body
sPrice = Array(0, 0, 0, 0)
For iDIV = 0 To .getElementsByTagName("div").Length - 1
With .getElementsByTagName("div")(iDIV)
Select Case .className
Case "tyre-price-cost tyres-1"
sPrice(0) = .innerText
Case "tyre-price-cost tyres-2"
sPrice(1) = .innerText
Case "tyre-price-cost tyres-3"
sPrice(2) = .innerText
Case "tyre-price-cost tyres-4"
sPrice(3) = .innerText
With Sheet1
.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = sPrice(0)
.Cells(Rows.Count, "A").End(xlUp).Offset(0, 1) = sPrice(1)
.Cells(Rows.Count, "A").End(xlUp).Offset(0, 2) = sPrice(2)
.Cells(Rows.Count, "A").End(xlUp).Offset(0, 3) = sPrice(3)
End With
sPrice = Array(0, 0, 0, 0)
Case Else
End Select
End With
Next iDIV
End With
End Sub
fwiw,我相信 IXMLHTTPRequest based scrape than one using the InternetExplorer object.
会更好
使用此代码,我想从网站检索特定标签的值并将其放在我的电子表格中:
Sub get_tit()
Dim wb As Object
Dim doc As Object
Dim sURL As String
Dim lastrow As Long
lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
Set wb = CreateObject("internetExplorer.Application")
wb.navigate "https://www.tyre-shopper.co.uk/search/205-55-16/V/91"
Do While wb.Busy
Loop
Set doc = wb.document
Price = SelectNodes("#more-tyres > li:nth-child(4) > div > div.result-buy > form > span.tyre-price > div.tyre-price-cost.tyres-1 > strong")
Range("A5").Value = Price
End Sub
我尝试使用 CSS 到 select 的路径作为节点,但不能。 我也尝试从 class select 它,但它再次不起作用
这是网站上的代码,我想从中检索值 57.50
<span class="tyre-price">
Fully Fitted Price
<div class="tyre-price-cost tyres-1">
<strong>£57.50</strong>
</div><div class="tyre-price-cost tyres-2" style="display:none">
<strong>£115.00</strong>
</div><div class="tyre-price-cost tyres-3" style="display:none">
<strong>£172.50</strong>
</div><div class="tyre-price-cost tyres-4" style="display:none">
<strong>£230.00</strong>
</div><div class="tyre-price-cost tyres-5" style="display:none">
<strong>£287.50</strong>
</div>
</span>
根据 getElementsByClassName method but cycling through the collection returned by the getElementsByTagName method 直接提取元素并比较 class 属性 似乎效果不佳。
Sub get_tit()
Dim wb As Object
Dim doc As Object
Dim sURL As String
Dim lastrow As Long
Dim iDIV As Long, sPrice As Variant, sib As Long
Dim eSIB As IHTMLElement
lastrow = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
Set wb = CreateObject("internetExplorer.Application")
wb.Visible = True
wb.navigate "https://www.tyre-shopper.co.uk/search/205-55-16/V/91"
Do While wb.Busy And wb.readyState <> 4
DoEvents
Loop
Set doc = wb.document
With doc.body
sPrice = Array(0, 0, 0, 0)
For iDIV = 0 To .getElementsByTagName("div").Length - 1
With .getElementsByTagName("div")(iDIV)
Select Case .className
Case "tyre-price-cost tyres-1"
sPrice(0) = .innerText
Case "tyre-price-cost tyres-2"
sPrice(1) = .innerText
Case "tyre-price-cost tyres-3"
sPrice(2) = .innerText
Case "tyre-price-cost tyres-4"
sPrice(3) = .innerText
With Sheet1
.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) = sPrice(0)
.Cells(Rows.Count, "A").End(xlUp).Offset(0, 1) = sPrice(1)
.Cells(Rows.Count, "A").End(xlUp).Offset(0, 2) = sPrice(2)
.Cells(Rows.Count, "A").End(xlUp).Offset(0, 3) = sPrice(3)
End With
sPrice = Array(0, 0, 0, 0)
Case Else
End Select
End With
Next iDIV
End With
End Sub
fwiw,我相信 IXMLHTTPRequest based scrape than one using the InternetExplorer object.
会更好