golang 解析html

在Go语言中,解析HTML文件可以使用net/html包,这个包提供了一些函数和类型,用于解析HTML文档并提取其中的信息,下面是一个简单的示例,展示了如何使用Go语言解析HTML文件:

golang 解析html

你需要导入net/html包:

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

接下来,你可以使用http.Get()函数获取HTML文件的内容,并将其保存到一个字符串变量中:

func main() {
	resp, err := http.Get("https://example.com")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	// 将响应体转换为字符串
	htmlString := string(body)
}

现在,你可以使用html.Parse()函数将HTML字符串解析为一个DOM树:

func main() {
	// ...(省略前面的代码)
	// 解析HTML字符串为DOM树
	doc, err := html.Parse(strings.NewReader(htmlString))
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
}

一旦你有了DOM树,你就可以使用各种方法来提取HTML文件中的信息,你可以使用SelectNode()函数来选择特定的节点,然后使用NextSibling()PrevSibling()函数来遍历节点的兄弟节点,下面是一个示例,展示了如何提取HTML文件中的所有链接:

func main() {
	// ...(省略前面的代码)
	// 选择所有的a标签节点(链接)
	var links []*html.Node
	var f func(*html.Node)
	f = func(n *html.Node) {
		if n.Type == html.ElementNode && n.Data == "a" {
			links = append(links, n)
		} else {
			for c := n.FirstChild; c != nil; c = c.NextSibling {
				f(c)
			}
		}
	}
	f(doc)
}

你可以遍历链接列表并打印出每个链接的文本和URL:

func main() {
	// ...(省略前面的代码)
	// 遍历链接列表并打印信息
	for _, link := range links {
		if a := link.Attr[html.AttributeName("href")]; a != "" {
			fmt.Println("Link text:", link.FirstChild.Data) // 链接文本是第一个子节点的文本内容
			fmt.Println("Link URL:", a) // 链接URL是href属性的值
		} else {
			fmt.Println("Link text:", link.FirstChild.Data) // 链接文本是第一个子节点的文本内容
		}
	}
}

这就是使用Go语言解析HTML文件的基本步骤,你可以根据需要进一步扩展和定制代码,以满足你的具体需求。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/181406.html

(0)
K-seoK-seoSEO优化员
上一篇 2023年12月30日 08:25
下一篇 2023年12月30日 08:26

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入