信息发布→ 登录 注册 退出

如何在 Go 语言中使用 CSS 选择器解析 HTML 并提取指定元素内容

发布时间:2026-01-10

点击量:

本文介绍如何使用 go 语言(通过 goquery 库)高效解析 html 页面,利用类似 jquery 的 css 选择器语法精准提取具有特定类名(如 `.funcname`)的 dom 元素文本或属性值。

在 Go 生态中,原生 net/html 包虽可解析 HTML,但操作繁琐、缺乏选择器支持;而 goquery 是业界广泛采用的轻量级 HTML 解析库,它基于 net/html 构建,并提供与 jQuery 高度兼容的链式 API,极大简化了 DOM 查询与数据抽取流程。

✅ 快速上手:安装与基础用法

首先安装 goquery:

go get github.com/PuerkitoBio/goquery

以下是一个完整示例:从 HTML 字符串中提取所有

的文本内容:
package main

import (
    "fmt"
    "strings"
    "github.com/PuerkitoBio/goquery"
)

func main() {
    html := `
    
      
        ParseHTML
        Ignore me
        ExtractValue
      


    `

    doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
    if err != nil {
        panic(err)
    }

    // 使用 CSS 选择器查找所有 .funcname 元素
    doc.Find(".funcname").Each(func(i int, s *goquery.Selection) {
        text := strings.TrimSpace(s.Text())
        fmt.Printf("第 %d 个 funcname: %q\n", i+1, text)
        // 输出:
        // 第 1 个 funcname: "ParseHTML"
        // 第 2 个 funcname: "ExtractValue"
    })
}

? 进阶技巧:获取属性、HTML 或遍历子节点

  • 获取元素属性(如 id、data-value):

    立即学习“前端免费学习笔记(深入)”;

    id, exists := s.Attr("id")
    if exists { fmt.Println("ID:", id) }
  • 提取原始 HTML 内容(含标签):

    htmlContent, _ := s.Html()
    fmt.Println("Inner HTML:", htmlContent)
  • 查找嵌套结构(如 .funcname > code):

    doc.Find(".funcname code").Text()

⚠️ 注意事项

  • goquery.NewDocument() 默认发起 HTTP 请求,若解析本地 HTML 字符串或 io.Reader,请使用 NewDocumentFromReader(),避免误触发网络调用;
  • HTML 若未规范闭合或含编码问题(如非 UTF-8),建议先用 golang.org/x/net/html/charset 自动检测并转换;
  • 在高并发场景下,每个 goroutine 应独立创建 *goquery.Document,因其不保证并发安全。

掌握 goquery 的 CSS 选择器能力,可让 Go 在网页抓取、模板预渲染、自动化测试断言等场景中兼具性能与开发效率。

标签:# dom  # 可让  # 如何使用  # 先用  # 因其  # 请使用  # 遍历  # 进阶  # 是一个  # 链式  # 自动化  # http  # 选择器  # css  # 并发  # class  # 字符串  # ai  # 编码  # golang  # github  # go  # git  # html  # jquery  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!