goquery 是一个为 Go 语言提供类似于 jQuery 的语法以解析 HTML 文档的库,可以通过链式语法来操作和查询 HTML 文档。它并不包含一个功能齐全的 DOM 树,因此 jQuery 的有状态操作函数(如 height()
、css()
、detach())
在这里是不能使用的。
此外,由于 goquery 底层基于 net/html
来做解析,而使用 net/html
的要求是提供的文档输入流必须是 UTF-8 编码,所以 goquery 也是如此。
安装
API 说明
goquery 主要暴露了两个结构体(Document
和 Selection
)以及一个接口(Matcher
)。与 jQuery 不同,使用 goquery 前需要告知 goquery 是对哪个 HTML 文档进行操作,这就是 Document
的作用。
goquery 基于 Cascadia 提供了一套类似 jQuery 选择器的功能,所以对于原本已熟悉 jQuery 选择器的学习者来说,上手 goquery 更加事半功倍了。不过要注意的是 Cascadia 并不一定能完全支持 jQuery 支持的所有选择器,
示例
下面代码会获取我的博客首页中的文章标题输出到控制台上:
在上面的示例程序中最后是通过
doc.Find()
方法来找到我们的目标节点,而该方法的参数就是选择器表达式,大部分 CSS 选择器语法都可以在这里使用,可参考:https://www.w3school.com.cn/cssref/css_selectors.asp。
执行结果如下:
常用方法
在前面的示例中我是使用 http 客户端请求一个 URL 来获取一个 HTML 文档,在下面的测试中为更方便的展示出各方法的特性,我们就直接自定义 HTML 文档来保存到字符串中,就像这样:
为精简文章篇幅,后续方法示例中都会精简实例化 doc
的部分。
Length
获取匹配到的元素个数。
Eq
根据索引获取指定元素,返回值为 Selection
类型。
First & Last
获取查询结果集中第一个元素(相当于 eq(0)
)和最后一个元素,返回值为 Selection
类型。
et
根据索引获取指定元素,返回值为 *html.Node
类型(源包 golang.org/x/net/html
)。
ndex
获取当前元素的索引。
Each
循环匹配到的元素。
Not
从匹配结果中排除指定元素。
Prev
获取匹配到的元素的前一个兄弟元素。
Prepend
将匹配到的元素移动到文档头部。
Remove
将匹配到的元素从文档中移除并返回。
RemoveAttr
移除匹配到的元素的指定属性。
Parent
获取指定元素的父元素下的所有元素。
SetHtml
设置指定元素的内容,支持 HTML。
SetText
设置指定元素的内容,如果内容包含 HTML 字符将会进行转义。
SetAttr
为匹配到的元素设置属性。
暂时就介绍这么多,其实就对于 HTML 文档的解析来说,掌握一个
Find
和Each
,然后使用选择器语法就妥妥的能解决 95% 的问题了。
评论区