Files
scraper/search_node.go
2026-03-02 22:26:28 +03:00

41 lines
668 B
Go

package scraper
import "golang.org/x/net/html"
func MatchNode(n1 *html.Node, n2 *html.Node) bool {
if n1.Data == n2.Data {
if len(n1.Attr) == 0 ||
len(n2.Attr) == 0 {
return false
}
for i, a1 := range n1.Attr {
a2 := n2.Attr[i]
return a1.Key == a2.Key
}
}
return false
}
func SearchNode(target *html.Node, n *html.Node) chan *html.Node {
ch := make(chan *html.Node)
var crawl crawlFunc
crawl = func(n *html.Node) {
if n.Type == html.ElementNode {
if MatchNode(target, n) {
ch <- n
}
}
c := n.FirstChild
for c != nil {
crawl(c)
c = c.NextSibling
}
}
go func() {
defer close(ch)
crawl(n)
}()
return ch
}