GoTool 基于 golang.org/x/net/html 封装了 HTML DOM 操作工具包,可以方便地对 HTML 实现 DOM 解析及操作。
说明
此工具仅用于 HTML 转换,功能较少,推荐使用 goquery 工具包:
https://github.com/PuerkitoBio/goquery
import (
"github.com/cnlesscode/gotool/gDom"
"golang.org/x/net/html"
)
功能 : 从一个文件初始化 HTML 对象
参数 : html 文件地址
返回: *html.Node
功能 : 从一个 URL 初始化 HTML 对象
参数 : html
返回: *html.Node
功能 : 从一个 html 文档内容初始化 HTML 对象
参数 : html 内容
返回: *html.Node
功能 : 查询一个节点
参数 : 父级节点, 节点类型(见下面的说明), 标签名称
返回 : 对应节点, error
节点类型 :
0 ErrorNode NodeType
1 TextNode
2 DocumentNode
3 ElementNode
4 CommentNode
5 DoctypeNode
示例
func TestMain(t *testing.T) {
// 获取网页源码,创建 html node
htmlNode, err := gDom.InitByUrl("https://fanyi.baidu.com/")
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
// 寻找 body 节点
body, err := gDom.FindNode(htmlNode, html.ElementNode, "body")
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
// 寻找 div 标签
div, err := gDom.FindNode(body, html.ElementNode, "div")
if err == nil {
fmt.Printf("Attr: %v\n", div.Attr)
fmt.Printf("div.Data: %v\n", div.Data)
} else {
fmt.Printf("err: %v\n", err)
}
}
功能 : 查询多个节点
参数 : 父级节点, 节点类型(见下面的说明), 标签名称
返回 : 对应节点数值, error
示例
func TestMain(t *testing.T) {
// 获取网页源码,创建 html node
htmlNode, err := gDom.InitByFile("./demoData/html.html")
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
// 寻找 body 节点
body, err := gDom.FindNode(htmlNode, html.ElementNode, "body")
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
// 寻找 p 标签 [ 多个 ]
pNodes := make([]*html.Node, 0)
gDom.FindNodes(body, html.ElementNode, "p", &pNodes)
fmt.Printf("pNodes: %v\n", pNodes)
}