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!
推薦閱讀:
- Go語言實現關閉http請求的方式總結
- Golang實現HTTP編程請求和響應
- Golang實現http文件上傳小功能的案例
- Golang Http請求返回結果處理
- Golang請求fasthttp實踐