Go 每日一库:goquery 库的选择器语法与 DOM 操作

Go 每日一库:goquery 库的选择器语法与 DOM 操作

【免费下载链接】go-daily-lib Go 每日一库 【免费下载链接】go-daily-lib 项目地址: https://gitcode.com/GitHub_Trending/go/go-daily-lib

goquery 是 Go 语言中一款强大的 HTML 解析和操作库,它模拟了 jQuery 的核心功能,提供了简洁的选择器语法和便捷的 DOM 操作 API,让开发者能够轻松处理网页内容。无论是网页抓取、数据提取还是 HTML 文档处理,goquery 都能显著提升开发效率。

选择器语法基础

goquery 的选择器语法几乎与 jQuery 完全兼容,支持 CSS 选择器的大部分功能。常用选择器包括元素选择器、ID 选择器、类选择器、属性选择器等。

元素选择器通过 HTML 标签名匹配元素,例如 doc.Find("div") 会匹配所有 <div> 元素。ID 选择器使用 # 前缀,如 doc.Find("#content") 可定位 ID 为 content 的元素。类选择器则以 . 为前缀,例如 doc.Find(".article") 会选中所有 class 包含 article 的元素。

属性选择器提供了更灵活的匹配方式,支持 [attr][attr=value][attr^=value][attr$=value] 等形式。例如 doc.Find("a[href^='https']") 可以筛选出所有 href 属性以 https 开头的链接。

DOM 操作方法

goquery 提供了丰富的 DOM 操作方法,可对选中的元素进行遍历、修改和提取等操作。

遍历元素常用 Each() 方法,它接受一个回调函数,对每个匹配的元素执行操作。例如,以下代码遍历所有 <a> 标签并打印其 href 属性:

doc.Find("a").Each(func(i int, s *goquery.Selection) {
    href, exists := s.Attr("href")
    if exists {
        fmt.Printf("%d: %s\n", i, href)
    }
})

修改元素内容可使用 Text()Html() 方法,分别用于设置或获取元素的文本内容和 HTML 内容。例如 s.Text("新文本内容") 会替换元素的文本,s.Html("<span>新HTML</span>") 则会设置元素的 HTML 内容。

提取元素属性使用 Attr() 方法,如上述代码所示。此外,Text() 方法不带参数时可获取元素的文本内容,Html() 方法不带参数时可获取元素的 HTML 内容。

实际应用示例

以下是一个使用 goquery 抓取网页标题和链接的简单示例,完整代码可参考 goquery/get-started/main.go

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/PuerkitoBio/goquery"
)

func main() {
    // 发送 HTTP 请求获取网页内容
    res, err := http.Get("http://example.com")
    if err != nil {
        log.Fatal(err)
    }
    defer res.Body.Close()

    // 解析 HTML 文档
    doc, err := goquery.NewDocumentFromReader(res.Body)
    if err != nil {
        log.Fatal(err)
    }

    // 提取标题
    title := doc.Find("title").Text()
    fmt.Printf("网页标题: %s\n", title)

    // 提取所有链接
    doc.Find("a").Each(func(i int, s *goquery.Selection) {
        href, _ := s.Attr("href")
        text := s.Text()
        fmt.Printf("%d. %s - %s\n", i+1, text, href)
    })
}

在这个示例中,首先通过 http.Get 获取网页内容,然后使用 goquery.NewDocumentFromReader 解析 HTML 文档。接着利用选择器 title 提取网页标题,再通过 a 选择器遍历所有链接并输出其文本和 href 属性。

goquery 还支持更复杂的选择器组合和 DOM 操作,如父子选择器、兄弟选择器、元素过滤、内容修改等。通过灵活运用这些功能,可以高效地完成各种网页数据提取和处理任务。无论是构建网络爬虫、分析网页结构,还是生成动态 HTML 内容,goquery 都是 Go 开发者的得力工具。

【免费下载链接】go-daily-lib Go 每日一库 【免费下载链接】go-daily-lib 项目地址: https://gitcode.com/GitHub_Trending/go/go-daily-lib

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值