如何使用VBA从网页获取产品标题?

时间:2018-11-05 17:39:45

标签: html excel vba web-scraping

我现在已经能够搜索Google并获得不同PDP(产品详细信息页面)的不同链接,并且我想抓取这些页面的产品标题。但是我在准确地理解如何理解产品标题html代码方面遇到了一些麻烦。

下面是我的代码:

Sub testing()


Dim ie As New SHDocVw.InternetExplorer
Dim x As Integer
Dim x1 As Integer
Dim i As Integer
Dim i1 As Integer
Dim Product_Title As String
Dim HTMLDoc As MSHTML.HTMLDocument
Dim htmlinput As MSHTML.IHTMLElement



ie.Navigate "https://www.johnlewis.com/asus-zenbook-ux331un-eg009t-laptop-intel- core-i5-8gb-256gb-ssd-geforce-mx150-13-3-royal-blue/p3405316"

ie.Visible = True

While ie.Busy Or ie.ReadyState < 4: DoEvents: Wend


  Product_Title = ie.document.getElementsByClassName("product-header__title")


   Debug.Print (Product_Title)

但是我得到[object HTMLHeadingElement]作为输出而不是产品标题

这是html代码:

<h1 class="product-header__title" itemprop="name">ASUS ZenBook S UX391UA-ET087T Laptop, Intel Core i7, 8GB RAM, 256GB SSD, 13.3”, Full HD, Burgundy</h1>

1 个答案:

答案 0 :(得分:4)

您想要.innerText属性并索引到与类名匹配时返回的集合中。

ie.document.getElementsByClassName("product-header__title")(0).innerText

作为第一个使用该类名称的人,您还可以使用:

ie.document.querySelector(".product-header__title").innerText

.是CSS class selector,而querySelector方法将其应用于DOM文档并返回第一个匹配项。

请注意,当使用您的语法返回集合时,您需要:

Dim Product_Title As Object
Set Product_Title = ie.document.getElementsByClassName("product-header__title")

然后使用Product_Title(0).innerText进行索引。我不喜欢在局部变量名称中使用下划线,因此只使用productTitle;另外,请注意外壳的变化。


如果只在标题后面,则发出XMLHTTP request而不是打开IE浏览器实例会更快:

Option Explicit
Public Sub GetTitle()
    Dim sResponse As String, html As HTMLDocument
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.johnlewis.com/asus-zenbook-ux331un-eg009t-laptop-intel-%20core-i5-8gb-256gb-ssd-geforce-mx150-13-3-royal-blue/p3405316", False
        .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
        .send
        sResponse = StrConv(.responseBody, vbUnicode)
    End With

    Set html = New HTMLDocument
    With html
        .body.innerHTML = sResponse
        Debug.Print .querySelector(".product-header__title").innerText
    End With
End Sub

参考(VBE>工具>参考):

  1. Microsoft HTML对象库