HTML DOM 操作

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"
)

初始化函数

InitByFile

功能 : 从一个文件初始化 HTML 对象
参数 : html 文件地址
返回: *html.Node    

InitByUrl

功能 : 从一个 URL 初始化 HTML 对象
参数 : html 
返回: *html.Node    

InitByContent

功能 : 从一个 html 文档内容初始化 HTML 对象
参数 : html 内容
返回: *html.Node    

节点查询

FindNode()

功能 : 查询一个节点
参数 : 父级节点, 节点类型(见下面的说明), 标签名称
返回 : 对应节点, 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)
	}
}

FindNodes()

功能 : 查询多个节点
参数 : 父级节点, 节点类型(见下面的说明), 标签名称
返回 : 对应节点数值, 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)
}