I'm trying to web scrape the following website: https://echa.europa.eu/brief-profile/-/briefprofile/100.047.293#ScientificProperties
So far I have the following code that returns the inner text for each h4 tag.
Sub getContents()
Dim XMLReq As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim SubTag As MSHTML.IHTMLElementCollection
Dim SubName As MSHTML.IHTMLElement
XMLReq.Open "Get", "https://echa.europa.eu/brief-profile/-/briefprofile/100.047.293", False
XMLReq.send
If XMLReq.Status <> 200 Then
MsgBox "Problem" & vbNewLine & XMLReq.Status & " - " & XMLReq.statusText
Exit Sub
End If
HTMLDoc.body.innerHTML = XMLReq.responseText
Set SubTag = HTMLDoc.getElementsByTagName("dt")
For Each SubName In SubTag
Debug.Print SubName.innerText
Next SubName
End Sub
Although this returns a lot of useful information this also returns a elements with Tag Name dt Some results are not wanted (highlighted) but I am unsure how to limit this list. Exploring the HTML there doesnt appear to be any tag/id to distinguish these. This also makes me wonder if I am extracting the information in the best way?

Similarly if for each of the non highlighted Items in the list I wish to capture the values associated with them on the page e.g.
C Physical state at 20°C and 1013 hPa Solid (100%) [1]
C Form Crystalline (100%) [1]
C Odour Other (100%) [1]
C Substance type Organic (100%) [1]
And so on...
The tag name for this information is "dd" however I am unsure how I can return both results at the same time. I'm hoping that in the immediate window I can have the list of physical and chemical properties and to the right for each the value is also returned.
Attempting this I have the following code that causes a mismatch error but I dont understand what I am doing wrong.
Sub getContents()
Dim XMLReq As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim SubTag As MSHTML.IHTMLElementCollection
Dim SubName As MSHTML.IHTMLElement
Dim SubInfo As MSHTML.IHTMLElement
XMLReq.Open "Get", "https://echa.europa.eu/brief-profile/-/briefprofile/100.047.293", False
XMLReq.send
If XMLReq.Status <> 200 Then
MsgBox "Problem" & vbNewLine & XMLReq.Status & " - " & XMLReq.statusText
Exit Sub
End If
HTMLDoc.body.innerHTML = XMLReq.responseText
Set SubTag = HTMLDoc.getElementsByTagName("dt")
Set SubInfo = SubTag.tags("dd")
For Each SubName In SubTag
Debug.Print SubName.innerText, SubInfo.innerText
Next SubName
End Sub
I appreciate its a long post but if anyone could comment on what I am doing wrong that would be great.
UPDATE:
The following code better achieves the desired data in the immediate windows.
Sub GetContents()
Dim XMLReq As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim SubSectList As MSHTML.IHTMLElement
Dim SubSects As MSHTML.IHTMLElementCollection
Dim SubSect As MSHTML.IHTMLElement
XMLReq.Open "Get", "https://echa.europa.eu/brief-profile/-/briefprofile/100.047.293", False
XMLReq.send
If XMLReq.Status <> 200 Then
MsgBox "Problem" & vbNewLine & XMLReq.Status & " - " & XMLReq.statusText
Exit Sub
End If
HTMLDoc.body.innerHTML = XMLReq.responseText
Set SubSectList = HTMLDoc.getElementsByClassName("col-xs-12 col-lg-10 MainContent")(1)
Set SubSects = SubSectList.getElementsByTagName("dt")
'Debug.Print SubSects.Length
For Each SubSect In SubSects
Debug.Print SubSect.innerText & " : "; SubSect.NextSibling.innerText
Next SubSect
End Sub