Golang中如何解析HTML和获取标签?
Golang中如何解析HTML和获取标签? // 刚接触Go语言,试图理解为什么n的值为1。 // 非常感谢
func main() {
var y int
fmt.Println(y) //0
n,err:=fmt.Scanf("%d\n", &y)
if err != nil{
log.Fatal(err)
}
fmt.Println("y =",y)// 打印y的值
fmt.Println("y+n =",y+n) // 不知为何打印出y的值加1,这个1是从哪里来的?n是布尔值吗?
fmt.Println("n",n) //1
fmt.Println("y =",y)
更多关于Golang中如何解析HTML和获取标签?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
在Go语言中,fmt.Scanf的返回值n表示成功扫描的项目数量,而不是布尔值。在你的代码中,n为1表示成功扫描了1个整数到变量y中。
关于HTML解析,Go标准库提供了golang.org/x/net/html包。以下是解析HTML和获取标签的示例:
package main
import (
"fmt"
"golang.org/x/net/html"
"strings"
)
func main() {
// 示例HTML
htmlStr := `<html>
<body>
<h1>标题</h1>
<p class="content">段落内容</p>
<a href="https://example.com">链接</a>
</body>
</html>`
// 解析HTML
doc, err := html.Parse(strings.NewReader(htmlStr))
if err != nil {
panic(err)
}
// 遍历所有节点
var traverse func(*html.Node)
traverse = func(n *html.Node) {
if n.Type == html.ElementNode {
fmt.Printf("找到标签: <%s>\n", n.Data)
// 获取标签属性
for _, attr := range n.Attr {
fmt.Printf(" 属性: %s=%q\n", attr.Key, attr.Val)
}
}
// 递归遍历子节点
for c := n.FirstChild; c != nil; c = c.NextSibling {
traverse(c)
}
}
traverse(doc)
}
输出:
找到标签: <html>
找到标签: <body>
找到标签: <h1>
找到标签: <p>
属性: class="content"
找到标签: <a>
属性: href="https://example.com"
如果需要提取特定标签,可以这样修改:
// 提取所有链接
func extractLinks(n *html.Node) []string {
var links []string
if n.Type == html.ElementNode && n.Data == "a" {
for _, attr := range n.Attr {
if attr.Key == "href" {
links = append(links, attr.Val)
}
}
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
links = append(links, extractLinks(c)...)
}
return links
}
// 使用
links := extractLinks(doc)
fmt.Println("所有链接:", links)
对于更复杂的HTML操作,可以考虑使用第三方库如goquery:
import "github.com/PuerkitoBio/goquery"
// 使用goquery示例
doc, err := goquery.NewDocumentFromReader(strings.NewReader(htmlStr))
if err != nil {
panic(err)
}
// 查找所有p标签
doc.Find("p").Each(func(i int, s *goquery.Selection) {
fmt.Printf("段落 %d: %s\n", i, s.Text())
})


