2015-07-18 53 views
2

有了这个代码,我想检索值从网站的特定标签,并把它放在我的电子表格中从Internet Explorer类的值:提取使用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路径将其选为节点,但不能。 我也试图从类中选择,但再没有奏效

这是从网站的代码,从中我想检索值57.50

<span class="tyre-price"> 
    Fully Fitted Price 
     <div class="tyre-price-cost tyres-1"> 

      <strong>&pound;57.50</strong> 
      </div><div class="tyre-price-cost tyres-2" style="display:none"> 

      <strong>&pound;115.00</strong> 
      </div><div class="tyre-price-cost tyres-3" style="display:none"> 

      <strong>&pound;172.50</strong> 
      </div><div class="tyre-price-cost tyres-4" style="display:none"> 

      <strong>&pound;230.00</strong> 
      </div><div class="tyre-price-cost tyres-5" style="display:none"> 

      <strong>&pound;287.50</strong> 
      </div> 
     </span> 

回答

1

我从来没有过根据getElementsByClassName method直接提取元素取得了很大的成功,但通过循环访问getElementsByTagName method返回的集合并比较类属性似乎也起作用。

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 

tyre scrape

FWIW,我相信你会与使用InternetExplorer objectIXMLHTTPRequest基于困境比一个得到更好的服务。