我现在已经能够搜索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>
答案 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>工具>参考):