dongxing5525 2015-10-17 08:44
浏览 53
已采纳

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

I want to get a document tree. Then, first, I displayed all elements name. But my code run loop. How can I do?

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)
    })
}
  • 写回答

1条回答 默认 最新

  • duanhoupeng6642 2015-10-17 11:05
    关注

    It seems to work with this:

    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)
        })
    }
    

    Having getTagName(s.Children()) inside the loop was causing trouble.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    悬赏问题

    • ¥15 咨询第六届工业互联网数据创新大赛原始数据
    • ¥15 Pycharm无法自动补全,识别第三方库函数接收的参数!
    • ¥15 STM32U575 pwm和DMA输出的波形少一段
    • ¥30 android百度地图SDK海量点显示标题
    • ¥15 windows导入environment.yml运行conda env create -f environment_win.yml命令报错
    • ¥15 这段代码可以正常运行,打包后无法执行,在执行for内容之前一直不断弹窗,请修改调整
    • ¥15 C语言判断有向图是否存在环路
    • ¥15 请问4.11到4.18以及4.27和4.29公式的具体推导过程是怎样的呢
    • ¥20 将resnet50中的卷积替换微ODConv动态卷积
    • ¥15 通过文本框输入商品信息点击按钮将商品信息列举出来点击加入购物车商品信息添加到表单中