Verwenden Sie Excel\VBA, um Informationen von Webseiten zu extrahieren
P粉555696738
P粉555696738 2023-09-02 18:48:32
0
1
837
<p>Ich versuche, Daten von einer Webseite zu extrahieren. Ich benötige 4 Datenbits, von denen ich 2 abrufen konnte, aber die anderen 2 wurden mir bereits angezeigt. </p> <p>Dies ist keine feste URL, sondern wurde nach der Umleitung vom IE abgerufen. Daher verwende ich für dieses Beispiel: https://cpc.farnell.com/warton/microprint-p2010-15-32um-250g/solder-paste-15-32um-250g-pot/dp/SD02808 </p> <p>Ich hoffe, den Titel zu bekommen:</p> <p><strong>Microprint P2010 No-Clean, bleifreie Lotpaste, 15-32 um, 250-g-Glas - MICROPRINT P2010 15-32UM, 250 g</strong></p> <p>und Herstellerteilenummer</p> <p><strong>Microprint P2010 15-32UM, 250G</strong></p> <p>Ich habe <strong>getElementbyID</strong> verwendet, um die Produktübersicht/Produktinformationen zu erhalten, und es funktioniert großartig, aber die anderen Textfelder scheinen nicht zu funktionieren (ich habe mir den Xpath angesehen und es Fehler bei Objekt) VBE erforderlich)</p> <p>Die anderen beiden Elemente habe ich erfolgreich implementiert mit: </p> <pre class="brush:php;toolbar:false;">Sub Mani() 'Variablen deklarieren Dim objWeb als Objekt Dim objHTML als Objekt Dimmen Sie objElement als Objekt Dimmen Sie strData, StrData1 als String Setze objWeb = CreateObject("internetexplorer.Application") str = "https://cpc.farnell.com/" objWeb.navigate str & Während objWeb.Busy = True Wend FullURL = objWeb.LocationURL Range("b2").Value = FullURL objWeb.navigate FullURL 'IE.Visible = True Während objWeb.Busy = True Wend Legen Sie objHTML = objWeb.document fest strData = objHTML.getElementById("pdpSection_FAndB").innerText ActiveSheet.Range("C3").Value = strData strData = objHTML.getElementById("pdpSection_pdpProdDetails").innerText Setze strData = Nothing ActiveSheet.Range("D3").Value = strData objWeb.Quit End Sub</pre> <p>URL-Neuladen dient der Navigation um URL-Weiterleitungen, </p> <p>https://cpc.farnell.com/SD02808</p> <p>Weiterleitung zur Haupt-URL</p> <p>https://cpc.farnell.com/warton/microprint-p2010-15-32um-250g/solder-paste-15-32um-250g-pot/dp/SD02808</p> <p>Ich möchte die Teilenummer in A1 eingeben, Excel sie als Variable in VB verwenden und dann die vollständige URL aus der IE-Instanz erneut lesen. Hierbei handelt es sich um ein Legacy-Problem bei dem Versuch, <strong>Get Data from the Web</strong> zu verwenden, das aufgrund eines Seitenskriptfehlers nicht richtig funktionierte, sodass eine Instanz von IE verwendet wurde. </p>
P粉555696738
P粉555696738

Antworte allen(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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage