goquery,是 github 上 PuerkitoBio 开源的 Go 语言库,代码仓库在 https://github.com/PuerkitoBio/goquery。goquery 是一个用于查询和操作 DOM 元素的库,并采用了尽可能与 jQuery 相似的语法,以降低学习难度和使用门槛。
Go语言
安装
示例
下面给出一个 goquery 的使用例子:
package mainimport ( "fmt" "log" "net/http" "github.com/PuerkitoBio/goquery")func ExampleScrape() { // 请求HTML页面. res, err := http.Get("http://metalsucks.net") 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文档. doc, err := goquery.NewdocumentFromReader(res.Body) if err != nil { log.Fatal(err) } // 在文档中进行查找. doc.Find(".sidebar-reviews article .content-block").Each(func(i int, s *goquery.Selection) { // 对于查找到的每一项,进一步获取目标文本内容. band := s.Find("a").Text() title := s.Find("i").Text() fmt.Printf("Review %d: %s - %s\n", i, band, title) })}func main() { ExampleScrape()}我们首先使用 net/http 进行 HTTP 请求,得到目标网站的响应。然后,使用了goquery 的 NewdocumentFromReader 来从响应读取并解析得到一个 HTML 文档。NewdocumentFromReader 是这样定义的:
func NewdocumentFromReader(r io.Reader) (*document, error)对于结果集合,使用 Selection 的 Each 方法进行遍历,对应 jQuery 中的 each 函数:
func (s *Selection) Each(f func(int, *Selection)) *Selection总结
goquery库方便了 Go 语言进行网页抓取和解析的工作,使得Go语言在该领域有了门槛较低、使用方便的工具。
goquery库目前已经历了数年的开发,代码质量较高,注释丰富,值得研究学习。

