Я играл со скребками данных с веб-страниц, используя VBS/VBA.
Если бы это был Javascript, я бы отсутствовал, так как это было легко, но в VBS/VBA это не так прямолинейно.
Это пример, который я сделал для ответа, он работает, но я планировал доступ к дочерним узлам с помощью getElementByTagName
, но я не мог понять, как их использовать! Объект HTMLElement
не имеет этих методов.
Sub Scrape()
Dim Browser As InternetExplorer
Dim Document As HTMLDocument
Dim Elements As IHTMLElementCollection
Dim Element As IHTMLElement
Set Browser = New InternetExplorer
Browser.navigate "http://www.hsbc.com/about-hsbc/leadership"
Do While Browser.Busy And Not Browser.readyState = READYSTATE_COMPLETE
DoEvents
Loop
Set Document = Browser.Document
Set Elements = Document.getElementsByClassName("profile-col1")
For Each Element in Elements
Debug.Print "[ name] " & Trim(Element.Children(1).Children(0).innerText)
Debug.Print "[ title] " & Trim(Element.Children(1).Children(1).innerText)
Next Element
Set Document = Nothing
Set Browser = Nothing
End Sub
Я смотрю на свойство HTMLElement.document
, видя, что это похоже на фрагмент документа, но с его трудностью работать или просто не то, что я думаю
Dim Fragment As HTMLDocument
Set Element = Document.getElementById("example") ' This works
Set Fragment = Element.document ' This doesn't
Это также кажется длинным способом для этого (хотя, как правило, это путь для vba imo). Кто-нибудь знает, есть ли более простой способ цепочки функций?
Document.getElementById("target").getElementsByTagName("tr")
будет потрясающе...