You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用VBA抓取与对应<h2>标签关联的多个<p>标签文本?

VBA抓取

标签之后的所有

标签文本解决方案

针对你遇到的

与

交替出现的HTML结构,要精准抓取每个

之后的

文本并保留顺序,可以通过以下两种VBA实现方案解决:

方案一:按顺序遍历子元素,标记收集起点

直接遍历目标div下的所有子元素,通过标记判断是否已进入

之后的内容区域,只收集该区域内的

文本:

' 假设HTMLDoc是已加载完成的HTML文档对象(如从IE/XMLHTTP获取)
Dim targetDiv As HTMLDivElement
Set targetDiv = HTMLDoc.querySelector("div.text-article_inside") ' 直接定位目标div

Dim NewsContent() As String
Dim i As Integer
i = 0
Dim startCollect As Boolean
startCollect = False

Dim childElem As IHTMLElement
For Each childElem In targetDiv.Children
    Select Case UCase(childElem.tagName) ' 统一大写避免大小写问题
        Case "H2"
            startCollect = True ' 遇到第一个h2后开启收集
            ' 可选:如需保留标题,可在此处添加标题记录代码
            ' ReDim Preserve NewsContent(i)
            ' NewsContent(i) = "标题:" & childElem.innerText
            ' i = i + 1
        Case "P"
            If startCollect Then
                ReDim Preserve NewsContent(i)
                NewsContent(i) = childElem.innerText
                i = i + 1
            End If
    End Select
Next childElem

' 输出收集到的内容示例
Dim j As Integer
For j = 0 To UBound(NewsContent)
    Debug.Print NewsContent(j)
Next j

方案二:按

分组抓取后续

针对每个

,遍历其后的兄弟节点,直到遇到下一个

为止,精准收集对应标题下的所有

:

' 假设HTMLDoc是已加载完成的HTML文档对象
Dim targetDiv As HTMLDivElement
Set targetDiv = HTMLDoc.querySelector("div.text-article_inside")

Dim h2Tags As IHTMLElementCollection
Set h2Tags = targetDiv.getElementsByTagName("H2")

Dim NewsContent() As String
Dim i As Integer
i = 0
Dim currentH2 As IHTMLElement
Dim nextSibling As IHTMLElement

For Each currentH2 In h2Tags
    ' 记录当前h2标题(可选)
    ReDim Preserve NewsContent(i)
    NewsContent(i) = "标题:" & currentH2.innerText
    i = i + 1
    
    Set nextSibling = currentH2.NextSibling
    ' 遍历后续兄弟节点,直到下一个h2或无节点
    Do While Not nextSibling Is Nothing
        If UCase(nextSibling.tagName) = "P" Then
            ReDim Preserve NewsContent(i)
            NewsContent(i) = nextSibling.innerText
            i = i + 1
        ElseIf UCase(nextSibling.tagName) = "H2" Then
            Exit Do ' 遇到下一个h2,停止当前分组收集
        End If
        Set nextSibling = nextSibling.NextSibling
    Loop
Next currentH2

' 输出结果示例
Dim j As Integer
For j = 0 To UBound(NewsContent)
    Debug.Print NewsContent(j)
Next j

原代码问题说明

你之前的代码仅提取了目标div下的所有

标签,没有区分

前后的内容,也未处理

与

的交替顺序,导致会包含不需要的Paragraph0,且无法关联标题与对应段落。

内容的提问来源于stack exchange,提问作者Night_Guardian_0910

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:23:10