Golang中如何解析HTML并获取标签:实战代码示例

Golang中如何解析HTML并获取标签:实战代码示例 https://play.golang.org/p/Bkoeu8TMaB2

我哪里做错了?

2 回复

没关系,我搞明白了。我忘记加了一个"for"循环。

更多关于Golang中如何解析HTML并获取标签:实战代码示例的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在您提供的代码中,问题出在使用了html.Parse来解析HTML字符串,但未正确处理解析后的文档结构。html.Parse返回一个文档树,您需要遍历节点来提取标签。以下是修复后的代码示例,使用golang.org/x/net/html包正确解析HTML并获取所有标签:

package main

import (
	"fmt"
	"golang.org/x/net/html"
	"strings"
)

func main() {
	htmlStr := `<html><body><h1>Hello, World!</h1><p>This is a paragraph.</p></body></html>`
	doc, err := html.Parse(strings.NewReader(htmlStr))
	if err != nil {
		panic(err)
	}
	
	var tags []string
	var f func(*html.Node)
	f = func(n *html.Node) {
		if n.Type == html.ElementNode {
			tags = append(tags, n.Data)
		}
		for c := n.FirstChild; c != nil; c = c.NextSibling {
			f(c)
		}
	}
	f(doc)
	
	fmt.Println("Tags found:", tags)
}

代码解释:

  • 使用html.Parse解析HTML字符串为文档树。
  • 定义递归函数f遍历所有节点,当节点类型为html.ElementNode(即HTML元素)时,将标签名添加到切片中。
  • 输出所有找到的标签:[html body h1 p]

在您的原始代码中,可能缺少节点遍历逻辑,导致无法提取标签。确保导入golang.org/x/net/html包(通过go get golang.org/x/net/html安装)。如果问题持续,请检查HTML字符串格式或提供更多错误细节。

回到顶部