我正试图从我传递的url中提取参与者的名字,对于我的URL,我需要从HTML页面中提取"Will Smith"。网页
我知道如何使用标签、classnaem等从HTML页面中提取元素。
但我面临的问题是,当我传递URL时,"https://ssl.ofdb.de/film/138627,I-Am-Legend"在回复文本中,我没有收到完整的HTML页面,因此我无法提取内容"Will Smith"。
我尝试了其他方法,如MSXML2.XMLHTTP60也都只返回部分HTML页面
我在这里附上了我的代码,任何人都请帮助
Sub Fetch_Info()
Dim ie As New InternetExplorer
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Top = 0
ie.Left = 700
ie.Width = 1000
ie.Height = 750
ie.AddressBar = 0
ie.StatusBar = 0
ie.Toolbar = 0
ie.navigate "https://ssl.ofdb.de/film/138627,I-Am-Legend"
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Application.Wait Now + TimeValue("00:00:04")
Dim doc As HTMLDocument
Set doc = ie.document
doc.Focus
Debug.Print doc.DocumentElement.innerHTML
End Sub
您可以使用以下css选择器。querySelector
返回与css模式匹配的第一个节点。该模式是[itemprop='actor'] span
,其寻找具有具有值为actor
的属性itemprop
的父元素的子span
。注意,我正在ie.document
节点下工作。
Debug.Print ie.document.querySelector("[itemprop=actor] span").innerText
该内容是静态的,所以您可以使用xhr并避免浏览器开销。响应标头字符集为none,因此需要响应正文。
Option Explicit
Public Sub GetActor()
Dim xhr As MSXML2.XMLHTTP60, html As MSHTML.HTMLDocument
'required VBE (Alt+F11) > Tools > References > Microsoft HTML Object Library ; Microsoft XML, v6 (your version may vary)
Set xhr = New MSXML2.XMLHTTP60
Set html = New MSHTML.HTMLDocument
With xhr
.Open "GET", "https://ssl.ofdb.de/film/138627,I-Am-Legend", False
.send
html.body.innerHTML = StrConv(.responseBody, vbUnicode)
End With
ActiveSheet.Cells(1, 1) = html.querySelector("[itemprop=actor] span").innerText
End Sub