使用 Excel\VBA 從網頁中抓取訊息
P粉555696738
P粉555696738 2023-09-02 18:48:32
0
1
823
<p>我正在嘗試從網頁中抓取數據,我需要 4 位數據,其中 2 位我已經能夠檢索到,但另外 2 位暗示了我。 </p> <p>這不是一個固定的 URL,但在重定向後已從 IE 檢索此 URL,因此對於本範例,我將使用: https://cpc.farnell.com/warton/microprint-p2010-15-32um-250g/solder-paste-15-32um-250g-pot/dp/SD02808 </p> <p>我希望獲得頭銜:</p> <p><strong>Microprint P2010 免清洗、無鉛焊膏,15-32um,250g 罐 - MICROPRINT P2010 15-32UM,250G</strong></p> <p>及製造商零件號碼</p> <p><strong>縮微列印 P2010 15-32UM,250G</strong></p> <p> 我一直在使用<strong>getElementbyID</strong> 來獲取產品概述/產品信息,效果很好,但其他文本字段似乎不起作用(我查看了Xpath,它在Object 上出錯) VBE中需要)</p> <p>我使用以下方法成功實現了另外 2 個元素:</p> <pre class="brush:php;toolbar:false;">Sub Mani() 'Declare variables Dim objWeb As Object Dim objHTML As Object Dim objElement As Object Dim strData, StrData1 As String Set objWeb = CreateObject("internetexplorer.Application") str = "https://cpc.farnell.com/" objWeb.navigate str & Cells(1, 1).Value While objWeb.Busy = True Wend FullURL = objWeb.LocationURL Range("b2").Value = FullURL objWeb.navigate FullURL 'IE.Visible = True While objWeb.Busy = True Wend Set objHTML = objWeb.document strData = objHTML.getElementById("pdpSection_FAndB").innerText ActiveSheet.Range("C3").Value = strData strData = objHTML.getElementById("pdpSection_pdpProdDetails").innerText Set strData = Nothing ActiveSheet.Range("D3").Value = strData objWeb.Quit End Sub</pre> <p>URL 重新載入是為了圍繞 U​​RL 重定向進行導航,</p> <p>https://cpc.farnell.com/SD02808</p> <p>重定向到主網址</p> <p>https://cpc.farnell.com/warton/microprint-p2010-15-32um-250g/solder-paste-15-32um-250g-pot/dp/SD02808</p> <p>我想將零件號輸入到 A1 中,Excel 將其用作 VB 中的變量,然後從 IE 實例重新讀取完整的 url。 這是嘗試使用<strong>從 Web 取得資料</strong>時遺留下來的問題,由於頁面腳本錯誤,功能效果不佳,因此使用了 IE 實例。 </p>
P粉555696738
P粉555696738

全部回覆(1)
P粉517475670

IE 已死,不應再使用。但是,也可以使用縮短的網址https://cpc.farnell.com/SD02808 透過 xhr(XML HTTP 請求)。以下程式碼僅顯示如何從已載入的 HTML 程式碼中讀取所需資訊。所有保障措施均缺失。

上面顯示的程式碼中出現物件錯誤是因為您嘗試將資料類型String 的變數設為Nothing,就像使用Set 的物件變數一樣strData =無

Sub GetCPCOfferInfos()

  Dim url As String
  Dim doc As Object
  
  Set doc = CreateObject("htmlFile")
  
  With CreateObject("MSXML2.XMLHTTP.6.0")
    url = "https://cpc.farnell.com/" & ActiveSheet.Cells(1, 1)
    .Open "GET", url, False
    .Send
    
    If .Status = 200 Then
      doc.body.innerHTML = .responseText
      
      ActiveSheet.Range("A3") = doc.getElementsByTagName("h1")(0).innertext _
                                & doc.getElementsByTagName("h2")(0).innertext 'Title
      ActiveSheet.Range("B3") = doc.getElementsByClassName("ManufacturerPartNumber")(0).innertext 'Manufacturer Part Number
      ActiveSheet.Range("C3") = doc.getElementById("pdpSection_FAndB").innertext 'Product Overview
      ActiveSheet.Range("D3") = doc.getElementById("pdpSection_pdpProdDetails").innertext 'Product Information
    Else
      MsgBox "Page not loaded. HTTP status " & .Status
    End If
  End With
End Sub
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!