go实用小技能-遍历html元素 - Go语言中文社区

go实用小技能-遍历html元素


我们在编写爬虫软件或者抓取某一个单一网页的时候,一般都是使用正则表达式技术获取需要的内容。这种方式比较灵活,但是使用门槛较高,而且效率不高,很多不了解正则表达式语法的小伙伴面对一连串符号看起来就是像在看天书一样。

今天给大家分享的是golang官方开源的net/html包, 这个包给我们封装了解析的html元素用到的基础方法。下载地址 https://github.com/golang/net

不能直接使用git clone 的方式下载源代码,必须使用go get 命令获取

<!DOCTYPE html>
<html>
<head>
    <title>This is a demo</title>
</head>
<body>
这是body下面的示例一

<a href="http://shang.qq.com/wpa/qunwpa?idkey=1720f7b75f19d952b80e10549ce35c6cc922c25b6505cd6f6680ac4fc7259484">
欢迎加入 dogo 技术交流群:437274005 点击右侧按钮快捷加入
</a>
<img src="https://github.com/wuciyou/dogo/blob/master/example/web/static/img/dogo.png">

这是body下面的示例二
</body>
</html>
package main

import (
    "golang.org/x/net/html"
    "log"
    "os"
)

func main() {
    f, err := os.Open("./demo.html")
    if err != nil {
        log.Panic(err)
    }
    doc, err := html.Parse(f)
    if err != nil {
        log.Panic(err)
    }

    // log.Printf("doc:%+v n ", doc)
    var parse func(*html.Node)
    parse = func(n *html.Node) {
        // log.Printf("node type:%d  ", n.Type)
        // switch n.Type {
        // case html.ErrorNode:
        //  log.Printf("ErrorNode(%p):%+v", n, n)
        // case html.TextNode:
        //  log.Printf("TextNode(%p):%+v", n, n)
        // case html.DocumentNode:
        //  log.Printf("DocumentNode(%p):%+v", n, n)
        // case html.ElementNode:
        //  log.Printf("ElementNode(%p):%+v", n, n)
        // case html.CommentNode:
        //  log.Printf("CommentNode(%p):%+v", n, n)
        // case html.DoctypeNode:
        //  log.Printf("DoctypeNode(%p):%+v", n, n)
        // }

        if n.Type == html.ElementNode && n.Data == "a" {
            if n.FirstChild != nil && n.FirstChild.Type == html.TextNode {
                log.Printf("href:%s, text:%s n", n.Attr[0].Val, n.FirstChild.Data)
            } else {
                log.Printf("href:%s n", n.Attr[0].Val)
            }

        }

        for c := n.FirstChild; c != nil; c = c.NextSibling {
            parse(c)
        }
    }
    parse(doc)
}

示例源码下载,https://github.com/wuciyou/blog/tree/master/go-%E5%AE%9E%E7%94%A8%E5%B0%8F%E6%8A%80%E8%83%BD/201701021426_%E9%81%8D%E5%8E%86html%E5%85%83%E7%B4%A0

欢迎加入 dogo 技术交流群:437274005 点击右侧按钮快捷加入
dogo交流群

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_37191841/article/details/53979720
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-08-25 15:30:21
  • 阅读 ( 2051 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢