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

如何用GoQuery获取<h3>自身文本,排除内部<span>内容

问题:Go语言中如何仅获取

标签自身的文本(排除子元素内容)

原Go函数代码:

func getMosWantedInfo(doc *goquery.Document) {
    doc.Find("div.flex-align-center.bg-base-lightest.padding-1.margin-1").Each(func(i int, s *goquery.Selection) {

        // For each item found, get the title
        title := s.Find("h3").Text()
        reward := s.Find("span")
        // iamge := s.Find("imag")
        fmt.Println("###########")
        fmt.Printf("SUSPECT %d: Name: %s\n", i, title)
        fmt.Printf("SUSPECT %d REWARD:  %s\n", i, reward)
        fmt.Println("-----------")
    })

    // Handle what happens when doc.find doesnt find the article wanted
}

补充示例HTML:

<div>
    <h3>
        <span>Text to avoid</span>
        Text to collect
    </h3>
</div>

当前调用h3.Text()会返回Text to avoidText to collect,需要仅提取Text to collect部分。


解决方案

goquery的Text()方法会递归拼接当前节点及所有子节点的文本,要单独获取父节点自身的文本,需要筛选出h3下的文本节点(TextNode),排除元素节点。

修改后的代码如下:

import (
    "strings"
    "golang.org/x/net/html"
    "github.com/PuerkitoBio/goquery"
    "fmt"
)

func getMosWantedInfo(doc *goquery.Document) {
    doc.Find("div.flex-align-center.bg-base-lightest.padding-1.margin-1").Each(func(i int, s *goquery.Selection) {
        // 提取h3自身的文本内容
        var title string
        s.Find("h3").Contents().Each(func(_ int, node *goquery.Selection) {
            // 判断节点类型是否为纯文本节点
            if node.Get(0).Type == html.TextNode {
                // 清理多余空白后拼接
                title += strings.TrimSpace(node.Text())
            }
        })

        reward := s.Find("span").Text() // 补充:原代码未取文本内容,此处添加.Text()
        // image := s.Find("img") // 修正原拼写错误:imag -> img
        fmt.Println("###########")
        fmt.Printf("SUSPECT %d: Name: %s\n", i, title)
        fmt.Printf("SUSPECT %d REWARD:  %s\n", i, reward)
        fmt.Println("-----------")
    })

    // 处理未找到目标元素的情况
    if doc.Find("div.flex-align-center.bg-base-lightest.padding-1.margin-1").Length() == 0 {
        fmt.Println("未找到通缉嫌疑人信息。")
    }
}

关键说明

  1. 用Contents()获取h3下的所有子节点(包含文本节点和元素节点)
  2. 通过node.Get(0).Type == html.TextNode筛选出纯文本节点
  3. 用strings.TrimSpace()清理文本中的换行、冗余空格,避免输出杂乱
  4. 修复原代码两处小问题:reward未调用.Text()获取实际内容;imag拼写错误修正为img

内容的提问来源于stack exchange,提问作者David Meléndez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:55:27