IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Golang如何解析Html代码

    Sam发表于 2014-11-11 09:24:08
    love 0

    Golang如何解析Html代码

    用Golang的朋友都知道如果我们要从HTML中提取一些内容、比如title或者是h2在或者是一些其他的HTML的内容、在Golang里面我们如果要自己写代码来提取还是相当的麻烦的;

    由于我之前在写Pyhon的爬虫的时候也需要解析HTML标签;所以用过PyQuery和BS4.这次在用Golang写爬虫的时候就留意了一下是否有Golang版本的Query。github是个好地方;上面很找到很多开源的代码可以用;包括GoQuery。

    所以这次会介绍一下如何用GoQuery来解析HTML元素。

    导入Goquery模块

    package main
    
    import (
        "fmt"
        "github.com/opesun/goquery"
    )
    
    其实还有一个github.com/PuerkitoBio/goquery的goquery模块、但是配置环境经常出差就没有选择
    

    Goquery的各种用法

    goquery有Jquery的大部分特性;如果你熟悉Jquery的话用Goquery就很简单了
    

    解析HTML的title

    var url = "http://www.hiadmin.org/"
    p, err := goquery.ParseUrl(url)
    if err != nil {
        panic(err)
    } else {
        pTitle := p.Find("title").Text()//直接提取title的内容
        fmt.Println(pTitle)
    
    }
    

    命令行下运行go run page.go之后得到输出

    “Smart Testing | 专注于软件测试领域的技术讨论和研究、关注IT互联网、WordPress技巧的个人博客”
    

    解析HTML内容

    如果要得到HTML的内容就更简单了
    fmt.Println(p.Html())//.Html()得到html内容
    

    获取h2/h1之类的标签内容

    class := p.Find("h2").Text()
    fmt.Println(class, "\n")
    

    我们可以使用Find()来查找需呀哦的标签;并且用.Text()来显示标签的内容

    解析提取class的内容

    如果要解析class的内容;需要在Find(".")加一个.
    

    下面我们要提取class”entry-title”里面、后面的”href”的URL地址

    由于超过1条内容所以不能用Text()来打印结果;需要用for来循环一下;

    t := p.Find(".entry-title a")
    for i := 0; i < t.Length(); i++ {
        d := t.Eq(i).Attr("href")
        fmt.Println(d)
    }
    

    输出结果如下

    http://www.hiadmin.org/code/ebookdownloadtools
    
    http://www.hiadmin.org/code/ipconversiontools
    
    
    http://www.hiadmin.org/code/go-mac-address
    
    
    http://www.hiadmin.org/linux/centos7-tomcat-start
    
    

    其实就是首页里面的4篇文章的地址

    如果想得到html里面所有的herf

    fmt.Println(p.Find("").Attrs("href"))
    

    用上面一行代码就可以得到HTML里面全部的href内容了

    判断元素是否存在

    如果想要判断一个元素是否在HTML里面;可以使用下面的代码
    
    fmt.Println(p.Find("div").HasClass("entry-content"))
    

    判断div下面有没有“entry-content”的class元素;有返还true;没有返回false

    PS:暂时就上面这些常用的了、详细内容可以去github上查看

    你可能也会喜欢这些文字

    • Golang获取本地计算机的MAC地址Golang获取本地计算机的MAC地址
    • Golang写得电子书下载工具EbookDownloadToolsGolang写得电子书下载工具EbookDownloadTools
    • Golang实现将IP地址转换为十进制Golang实现将IP地址转换为十进制
    • 用Go实现发送邮件用Go实现发送邮件
    • Python之reporthook回调函数Python之reporthook回调函数


沪ICP备19023445号-2号
友情链接