Golang爬蟲框架colly使用淺析

Golang 是一門非常適合編寫網絡爬蟲的語言,它有著高效的並發處理能力和豐富的網絡編程庫。下面是一個簡單的 Golang 網絡爬蟲示例:

package main
import (
    "fmt"
    "net/http"
    "io/ioutil"
    "regexp"
)
func main() {
    resp, err := http.Get("https://www.example.com")
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    re := regexp.MustCompile("<title>(.*)</title>")
    title := re.FindStringSubmatch(string(body))[1]
    fmt.Println("Title:", title)
}

這個爬蟲的功能是獲取指定網站的標題。代碼中使用瞭 Go 的標準庫 net/http 和 regexp 來進行網絡請求和正則表達式匹配。當然,這隻是一個簡單的示例,實際上爬蟲需要考慮更多的問題,比如反爬蟲、數據存儲、並發控制等等。

gocolly是用go實現的網絡爬蟲框架,我這裡用來測試的版本是:colly “github.com/gocolly/colly/v2”

gocolly的網絡爬蟲還是很強大,下面我們通過代碼來看一下這個功能的使用

package main
import (
  "fmt"
  colly "github.com/gocolly/colly/v2"
  "github.com/gocolly/colly/v2/debug"
)
func main() {
  mUrl := "http://www.ifeng.com/"
  //colly的主體是Collector對象,管理網絡通信和負責在作業運行時執行附加的回掉函數
  c := colly.NewCollector(
    // 開啟本機debug
    colly.Debugger(&debug.LogDebugger{}),
  )
  //發送請求之前的執行函數
  c.OnRequest(func(r *colly.Request) {
    fmt.Println("這裡是發送之前執行的函數")
  })
  //發送請求錯誤被回調
  c.OnError(func(_ *colly.Response, err error) {
    fmt.Print(err)
  })
  //響應請求之後被回調
  c.OnResponse(func(r *colly.Response) {
    fmt.Println("Response body length:", len(r.Body))
  })
  //response之後會調用該函數,分析頁面數據
  c.OnHTML("div#newsList h1 a", func(e *colly.HTMLElement) {
    fmt.Println(e.Text)
  })
  //在OnHTML之後被調用
  c.OnScraped(func(r *colly.Response) {
    fmt.Println("Finished", r.Request.URL)
  })
  //這裡是執行訪問url
  c.Visit(mUrl)
}

運行結果如下:

這裡是發送之前執行的函數

[000001] 1 [     1 – request] map["url":"http://www.ifeng.com/"] (0s)
[000002] 1 [     1 – responseHeaders] map["status":"OK" "url":"http://www.ifeng.com/"] (64.9485ms)
Response body length:250326
Finished http://www.ifeng.com/
[000003] 1 [     1 – response] map["status":"OK" "url":"http://www.ifeng.com/"] (114.9949ms)
[000004] 1 [     1 – html] map["selector":"div#newsList h1 a" "url":"http://www.ifeng.com/"] (118.9926ms)
[000005] 1 [     1 – html] map["selector":"div#newsList h1 a" "url":"http://www.ifeng.com/"] (118.9926ms)
[000006] 1 [     1 – scraped] map["url":"http://www.ifeng.com/"] (118.9926ms)

總結一下:

回調函數的調用順序如下:

OnRequest在發起請求前被調用

OnError請求過程中如果發生錯誤被調用

OnResponse收到回復後被調用

OnHTML在OnResponse之後被調用,如果收到的內容是HTML

OnScraped在OnHTML之後被調用

到此這篇關於Golang爬蟲框架colly使用淺析的文章就介紹到這瞭,更多相關Go colly框架內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: