golang解析網頁,可以做爬蟲了

1956587218發表於2017-06-21

> java 裡用 Jsoup,nodejs 裡用 cheerio,都可以相當方便的解析網頁,在 golang 語言裡也找到了一個網頁解析的利器,相當的好用,選擇器跟 jQuery 一樣

安裝

go get github.com/PuerkitoBio/goquery

使用

其實就是專案的readme.md裡的 demo

package main

import (
  "fmt"
  "log"

  "github.com/PuerkitoBio/goquery"
)

func ExampleScrape() {
  doc, err := goquery.NewDocument("http://metalsucks.net")
  if err != nil {
    log.Fatal(err)
  }

  // Find the review items
  doc.Find(".sidebar-reviews article .content-block").Each(func(i int, s *goquery.Selection) {
    // For each item found, get the band and title
    band := s.Find("a").Text()
    title := s.Find("i").Text()
    fmt.Printf("Review %d: %s - %s\n", i, band, title)
  })
}

func main() {
  ExampleScrape()
}

亂碼問題

中文網頁都會有亂碼問題,因為它預設是 utf8 編碼,這時候就要用到轉碼器了

安裝 iconv-go

go get github.com/djimenez/iconv-go

使用方法

func ExampleScrape() {
  res, err := http.Get(baseUrl)
  if err != nil {
    fmt.Println(err.Error())
  } else {
    defer res.Body.Close()
    utfBody, err := iconv.NewReader(res.Body, "gb2312", "utf-8")
    if err != nil {
      fmt.Println(err.Error())
    } else {
      doc, err := goquery.NewDocumentFromReader(utfBody)
      // 下面就可以用doc去獲取網頁裡的結構資料了
      // 比如
      doc.Find("li").Each(func(i int, s *goquery.Selection) {
        fmt.Println(i, s.Text())
      })
    }
  }
}

進階

有些網站會設定 Cookie, Referer 等驗證,可以在 http 發請求之前設定上請求的頭資訊

這個不屬於 goquery 裡的東西了,想了解更多可以檢視 golang 裡的 net/http 包下的方法等資訊

baseUrl:="http://baidu.com"
client:=&http.Client{}
req, err := http.NewRequest("GET", baseUrl, nil)
req.Header.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
req.Header.Add("Referer", baseUrl)
req.Header.Add("Cookie", "your cookie") // 也可以通過req.Cookie()的方式來設定cookie
res, err := client.Do(req)
defer res.Body.Close()
//最後直接把res傳給goquery就可以來解析網頁了
doc, err := goquery.NewDocumentFromResponse(res)

參考

可以愉快的爬人家的網站了


原文:https://tomoya92.github.io/2017/06/21/golang-goquery/

更多原創文章乾貨分享,請關注公眾號
  • golang解析網頁,可以做爬蟲了
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章