Golang中网络爬虫主要使用goquery包,它提供了发起HTTP请求、并对返回HTML解析的功能。
介绍
什么是爬虫
爬虫是按照一定规则自动的获取互联网上的信息,一般在搜索引擎、web扫描等
goquery 介绍
goquery 包提供提供了发起HTTP请求,并对返回的HTML进行解析
- 发起请求:
func NewDocumentFromReader(r io.Reader) (*Document, error)
- 解析
- Find 查找元素
- ChildrenFiltered 查找子元素
- Text 获取文本内容
- Html 获取HTML内容
- Attr 获取属性
- Each 遍历
- 选择器,参考 jquery 实现
- html tag
- css .class
- css #id
- 以及上述的组合的复合选择器
- 子孙选择器
- selector1 selector2 selector3 …
- 子选择器:selector1 > selector2 > …
- document.Find(“selector1”).ChildrenFiltered(selector2)
示例
package main
import (
"fmt"
"net/http"
"github.com/PuerkitoBio/goquery"
)
func main() {
req, err := http.NewRequest("GET", "https://github.com/xiexianbin", nil)
if err != nil {
fmt.Println(err)
}
req.Header.Set("authority", "github.com")
req.Header.Set("method", "GET")
req.Header.Set("path", "/xiexianbin")
req.Header.Set("scheme", "https")
req.Header.Set("user-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36")
//req.Header.Set("cookie", "")
client := &http.Client{Transport: http.DefaultTransport}
resp, err := client.Do(req)
if err != nil {
fmt.Println(err.Error())
}
document, err := goquery.NewDocumentFromReader(resp.Body)
if err != nil {
fmt.Println(err.Error())
}
document.Find(".js-pinned-items-reorder-container .js-pinned-items-reorder-list .flex-content-stretch").Each(func(i int, selection *goquery.Selection) {
fmt.Println("---", i, "---")
fmt.Println(selection.Find("span.repo").Text())
})
}