golang实现html获取指定位置的Dom

33 篇文章 0 订阅
15 篇文章 0 订阅

核心使用 “golang.org/x/net/html” 的html.Node来实现,
先用html.Parse方将html解析为数结构,然后迭代匹配节点;

实现:
/*
	Description : HTML内容提取
	Author : ManGe
			2912882908@qq.com
			https://github.com/mangenotwork/gathertool
*/

package gathertool

import (
	"bytes"
	"golang.org/x/net/html"
	"strings"
)

// GetPointHTML  获取指定位置的HTML, 用标签, 标签属性, 属性值来定位
func GetPointHTML(htmlStr, label, attr, val string) ([]string, error) {
	rse := make([]string, 0)
	doc, err := html.Parse(strings.NewReader(htmlStr))
	if err != nil {
		return rse, err
	}
	var f func(*html.Node)
	f = func(n *html.Node) {
		if n.Type == html.ElementNode {
			//log.Println("attr = ", n.Attr, n.Namespace, n.Data)
			if n.Data == label {
				for _, a := range n.Attr {
					if a.Key == attr && a.Val == val {
						var buf bytes.Buffer
						err = html.Render(&buf, n)
						if err == nil {
							rse = append(rse, buf.String())
						}
					}
				}
			}
		}
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			f(c)
		}
	}
	f(doc)
	return rse, nil
}

// GetPointIDHTML 获取指定标签id属性的html
func GetPointIDHTML(htmlStr, label, val string) ([]string, error) {
	return GetPointHTML(htmlStr, label, "id", val)
}

// GetPointClassHTML 获取指定标签class属性的html
func GetPointClassHTML(htmlStr, label, val string) ([]string, error) {
	return GetPointHTML(htmlStr, label, "class", val)
}

代码在 https://github.com/mangenotwork/gathertool

内置了很多实用的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值