go语⾔提取html,Golang如何解析Html代码
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/opesun/goquery"
)
其实还有⼀个github/PuerkitoBio/goquery的goquery模块、但是配置环境经常出差就没有选择
Goquery的各种⽤法
goquery有Jquery的⼤部分特性;如果你熟悉Jquery的话⽤Goquery就很简单了
解析HTML的title
var url = "/"
p, err := goquery.ParseUrl(url)
if err != nil {
panic(err)
} else {
pTitle := p.Find("title").Text()//直接提取title的内容
fmt.Println(pTitle)
}
命令⾏下运⾏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(".")加⼀个.
如何查看html代码下⾯我们要提取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)
}
输出结果如下
/code/ebookdownloadtools
/code/ipconversiontools
/code/go-mac-address
/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上查看