猿问

如何在 html 上获取所有元素名称(我的错误代码运行循环)

我想得到一个文档树。然后,首先,我显示所有元素名称。但是我的代码运行循环。我能怎么做?


package main


import (

    "github.com/PuerkitoBio/goquery"

    "golang.org/x/net/html"

)


func getTagName(s *goquery.Selection) {

    for _, n := range s.Nodes {

        if n.Type != html.ElementNode {

            continue

        }

        println(n.Data)

        getTagName(s.Children())

    }

}


func main() {

    doc, _ := goquery.NewDocument("https://news.ycombinator.com/")

    doc.Find("html body").Each(func(_ int, s *goquery.Selection) {

        getTagName(s)

    })

}


慕无忌1623718
浏览 185回答 1
1回答

摇曳的蔷薇

它似乎适用于此:package mainimport (    "os"    "github.com/PuerkitoBio/goquery"    "golang.org/x/net/html")var areWeLooping = make(map[*goquery.Selection]struct{})func getTagName(s *goquery.Selection) {    if _, weAreLooping := areWeLooping[s]; weAreLooping {        println("loop detected")        os.Exit(1)    }    areWeLooping[s] = struct{}{}    for _, n := range s.Nodes {        if n.Type != html.ElementNode {            continue        }        println(n.Data)    }    s.Children().Each(func(_ int, s *goquery.Selection) {        getTagName(s)    })}func main() {    doc, _ := goquery.NewDocument("https://news.ycombinator.com/")    doc.Find("html body").Children().Each(func(_ int, s *goquery.Selection) {        getTagName(s)    })}在getTagName(s.Children())循环内部造成了麻烦。
随时随地看视频慕课网APP

相关分类

Go
我要回答