使用 Excel\VBA 从网页中抓取信息
P粉555696738
P粉555696738 2023-09-02 18:48:32
0
1
838
<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 重新加载是为了围绕 URL 重定向进行导航,</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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板