From 4b53a1d3951e18eb4e72e284df711b5a9ebc6a18 Mon Sep 17 00:00:00 2001 From: nquidox Date: Mon, 13 Oct 2025 20:54:12 +0300 Subject: [PATCH] extended price search --- internal/parsers/mandarake.go | 47 ++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/internal/parsers/mandarake.go b/internal/parsers/mandarake.go index 75fb359..cf318aa 100644 --- a/internal/parsers/mandarake.go +++ b/internal/parsers/mandarake.go @@ -235,27 +235,40 @@ func (s *MandarakeParser) findNode(doc *html.Node, params price) *html.Node { } func (s *MandarakeParser) findData(doc *html.Node, params price) []string { - if doc != nil { - var ( - crawler func(*html.Node) - values []string - ) + if doc == nil { + return nil + } - crawler = func(node *html.Node) { - if node.Type == html.ElementNode && node.Data == params.subTag { - if strings.Contains(node.FirstChild.Data, params.substring) { - values = append(values, node.FirstChild.Data) - } - } - for child := node.FirstChild; child != nil; child = child.NextSibling { - crawler(child) + var ( + crawler func(*html.Node) + values []string + getText func(*html.Node) string + ) + + getText = func(n *html.Node) string { + if n.Type == html.TextNode { + return n.Data + } + var result strings.Builder + for c := n.FirstChild; c != nil; c = c.NextSibling { + result.WriteString(getText(c)) + } + return result.String() + } + + crawler = func(node *html.Node) { + if node.Type == html.ElementNode && node.Data == params.subTag { + text := strings.TrimSpace(getText(node)) + if strings.Contains(text, params.substring) { + values = append(values, text) } } - crawler(doc) - - return values + for child := node.FirstChild; child != nil; child = child.NextSibling { + crawler(child) + } } - return nil + crawler(doc) + return values } func (s *MandarakeParser) getPrice(rawStr []string) int {