VBA网页爬虫修改:遍历EndpointContent类元素抓取数据避免重复结果
错误原因
HTMLDoc.getElementsByClassName("EndpointContent")返回的是DOM元素集合,无法直接对集合调用getElementsByTagName方法,必须遍历集合内的单个EndpointContent节点后,再在单个节点下查询子元素。
修改后代码(完全保留原有逻辑结构)
Public Sub GetContents() Dim XMLReq As New MSXML2.XMLHTTP60 Dim HTMLDoc As New MSHTML.HTMLDocument Dim EndpointNode As Object ' 存储单个EndpointContent节点 Dim SubSectList As Object, SubSects As Object, SubSect As Object XMLReq.Open "Get", "https://echa.europa.eu/brief-profile/-/briefprofile/100.002.098", False XMLReq.send HTMLDoc.body.innerHTML = XMLReq.responseText ' 获取所有EndpointContent节点集合 Set SubSectList = HTMLDoc.getElementsByClassName("EndpointContent") ' 外层遍历每一个EndpointContent研究数据区块 For Each EndpointNode In SubSectList ' 单个区块内查询所有dt标签,沿用原有提取逻辑 Set SubSects = EndpointNode.getElementsByTagName("dt") ' 内层遍历当前区块的所有dt标签提取键值对 For Each SubSect In SubSects Debug.Print SubSect.innerText & " : " & SubSect.NextSibling.innerText Next SubSect Next EndpointNode End Sub
说明
- 代码引用要求和原有代码完全一致,需要提前在VBA编辑器中勾选
Microsoft XML, v6.0和Microsoft HTML Object Library - 仅新增了一层区块遍历逻辑,原有数据提取规则完全保留,输出格式和你之前的结果一致,自动过滤了重复的摘要类数据
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

