简介
什么是goquery?
goquery是由Go实现的基于Go的net/html包和CSS选择器库cascadia的HTML解析库。
由于net/html解析器需要UTF-8编码,goquery也同样需要,所以需要确保提供的html是UTF-8编码。
为什么用goquery?
由于net/html解析器返回的是节点,而不是功能齐全的DOM树,所以在使用的过程中goquery可以提供更便利的操作。
快速上手
我们先对微博热搜进行一个简单的解析,打印当日的热搜排名标题以及热度。
package main
import (
"fmt"
"github.com/PuerkitoBio/goquery"
"log"
"net/http"
)
type Data struct {
number string
title string
heat string
}
func main() {
// 爬取微博热搜网页
res, err := http.Get("https://s.weibo.com/top/summary")
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
if res.StatusCode != 200 {
log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)
}
//将html生成goquery的Document
dom, err := goquery.NewDocumentFromReader(res.Body)
if err != nil {
log.Fatalln(err)
}
var data []Data
// 筛选class为td-01的元素
dom.Find(".td-01").Each(func(i int, selection *goquery.Selection) {
data = append(data, Data{number: selection.Text()})
})
// 筛选class为td-02的元素下的a元素
dom.Find(".td-02>a").Each(func(i int, selection *goquery.Selection) {
data[i].title = selection.Text()
})
// 筛选class为td-02的元素下的span元素
dom.Find(".td-02>span").Each(func