为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕无忌1623718 2021-11-15 17:00:51
我想得到一个文档树。然后,首先,我显示所有元素名称。但是我的代码运行循环。我能怎么做?package mainimport (    "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)    })}
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

它似乎适用于此:


package main


import (

    "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())循环内部造成了麻烦。


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信