GoQuery - Go语言的jQuery

boyanx2个月前技术教程8

习惯了使用 jQuery 的 $(...) 语法来查询和操作 DOM 元素,那换种语言,用 Go 语言该怎么实现呢?来看看 goquery 吧!

简介

goquery,是 github 上 PuerkitoBio 开源的 Go 语言库,代码仓库在
https://github.com/PuerkitoBio/goquery。goquery 是一个用于查询和操作 DOM 元素的库,并采用了尽可能与 jQuery 相似的语法,以降低学习难度和使用门槛。

安装

goquery 需要 Go 1.1 以上版本,使用 go get 直接安装:

go get github.com/PuerkitoBio/goquery


目前的版本为 v1.5.1,依赖包括 net/html 和 CSS 选择器 cascadia。


示例

goquery 主要使用了两个结构体 Document (文档) 和 Selection (选择)。Document 代表了一个解析之后的 HTML 文档,而 Selection 则代表了进行查询后得到的 DOM 结点集合。Document 的定义中嵌入了 Selection,故而 Document 可使用 Selection 的方法。

下面给出一个 goquery 的使用例子:

package main

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

    "github.com/PuerkitoBio/goquery"
)

func ExampleScrape() {
    // 请求HTML页面.
    res, err := http.Get("http://metalsucks.net")
    if err != nil {
        log.Fatal(err)
    }
    defer res.Body.Close()
    if res.StatusCode != 200 {
        log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)
    }

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

    // 在文档中进行查找.
    doc.Find(".sidebar-reviews article .content-block").Each(func(i int, s *goquery.Selection) {
        // 对于查找到的每一项,进一步获取目标文本内容.
        band := s.Find("a").Text()
        title := s.Find("i").Text()
        fmt.Printf("Review %d: %s - %s\n", i, band, title)
    })
}

func main() {
    ExampleScrape()
}

该例子对一个新闻类网站进行了解析,并获取每一条新闻的标题等文本信息。

我们首先使用 net/http 进行 HTTP 请求,得到目标网站的响应。然后,使用了goquery 的 NewDocumentFromReader 来从响应读取并解析得到一个 HTML 文档。NewDocumentFromReader 是这样定义的:

func NewDocumentFromReader(r io.Reader) (*Document, error)

然后,使用 Selection 的 Find 方法进行查找,返回查询结果,对应 jQuery 中的 find 函数:

func (s *Selection) Find(selector string) *Selection

对于结果集合,使用 Selection 的 Each 方法进行遍历,对应 jQuery 中的 each 函数:

func (s *Selection) Each(f func(int, *Selection)) *Selection

对于遍历的每一项,再次使用 Find 查找子元素,并利用 Text 方法获得元素的文本,对应 jQuery 的 text 函数:

func (s *Selection) Text() string


总结

goquery 使用 Go 语言实现了与 jQuery 尽可能相似的查询和操作语法,包括 CSS 选择语法和绝大部分的操作函数,方便熟悉 jQuery 的 Go 语言开发人员快速完成 HTML 文档的解析和查询操作。

goquery库方便了 Go 语言进行网页抓取和解析的工作,使得Go语言在该领域有了门槛较低、使用方便的工具。

goquery库目前已经历了数年的开发,代码质量较高,注释丰富,值得研究学习。

相关文章

Pug 3.0.0正式发布,不再支持 Node.js 6/8

作者:李俊辰 前端之巅转发链接:https://mp.weixin.qq.com/s/q-49Gf-SFijeu7d2MqztIQ前言近日,Pug 3.0.0 正式发布,Pug 原名 Jade,是由...

Web Components实践:如何搭建一个框架无关的AI组件库

作者: 京东科技 牛志伟一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的We...

ASP.NET Core 9.0的7个方面重大更新!

我是编程乐趣,一个10年.Net开发经验老程序员,点击右上方“关注”,每天为你分享开源项目和编程知识。随着.Net 9发布,ASP.NET Core 9.0也迎来重大更新,主要体现在以下7个方面。1、...

git的基本操作

Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能。Git有很多优势,其中之一就是远程操作非常简便。本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Git...

WP模板开发中,怎样给wordpress网站的文章,添加点赞功能?

我们在网上浏览某些网站的文章时,在文章的结尾处,都会有一个点赞的按钮,如果觉得文章内容非常不错,就可以点击这个“点赞”按钮,给这篇文章进行点赞一下。在wordpress网站的模板主题开发中,我们可不可...

我对Backbone.js的一些认识

backbone.js已经不是当前最流行的前端框架了,但是对于我而言,依然具有比较好的学习价值。虽然目前来说,react,vue等mvvm框架非常火热,但是感觉自身还不到去使用这种框架的层次。这些技术...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。