Golang爬蟲框架colly使用淺析
Golang 是一門非常適合編寫網(wǎng)絡爬蟲的語言,它有著高效的并發(fā)處理能力和豐富的網(wǎng)絡編程庫。下面是一個簡單的 Golang 網(wǎng)絡爬蟲示例:
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) }
這個爬蟲的功能是獲取指定網(wǎng)站的標題。代碼中使用了 Go 的標準庫 net/http 和 regexp 來進行網(wǎng)絡請求和正則表達式匹配。當然,這只是一個簡單的示例,實際上爬蟲需要考慮更多的問題,比如反爬蟲、數(shù)據(jù)存儲、并發(fā)控制等等。
gocolly是用go實現(xiàn)的網(wǎng)絡爬蟲框架,我這里用來測試的版本是:colly “github.com/gocolly/colly/v2”
gocolly的網(wǎng)絡爬蟲還是很強大,下面我們通過代碼來看一下這個功能的使用
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對象,管理網(wǎng)絡通信和負責在作業(yè)運行時執(zhí)行附加的回掉函數(shù) c := colly.NewCollector( // 開啟本機debug colly.Debugger(&debug.LogDebugger{}), ) //發(fā)送請求之前的執(zhí)行函數(shù) c.OnRequest(func(r *colly.Request) { fmt.Println("這里是發(fā)送之前執(zhí)行的函數(shù)") }) //發(fā)送請求錯誤被回調(diào) c.OnError(func(_ *colly.Response, err error) { fmt.Print(err) }) //響應請求之后被回調(diào) c.OnResponse(func(r *colly.Response) { fmt.Println("Response body length:", len(r.Body)) }) //response之后會調(diào)用該函數(shù),分析頁面數(shù)據(jù) c.OnHTML("div#newsList h1 a", func(e *colly.HTMLElement) { fmt.Println(e.Text) }) //在OnHTML之后被調(diào)用 c.OnScraped(func(r *colly.Response) { fmt.Println("Finished", r.Request.URL) }) //這里是執(zhí)行訪問url c.Visit(mUrl) }
運行結(jié)果如下:
這里是發(fā)送之前執(zhí)行的函數(shù)
[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)
總結(jié)一下:
回調(diào)函數(shù)的調(diào)用順序如下:
OnRequest在發(fā)起請求前被調(diào)用
OnError請求過程中如果發(fā)生錯誤被調(diào)用
OnResponse收到回復后被調(diào)用
OnHTML在OnResponse之后被調(diào)用,如果收到的內(nèi)容是HTML
OnScraped在OnHTML之后被調(diào)用
到此這篇關于Golang爬蟲框架colly使用淺析的文章就介紹到這了,更多相關Go colly框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
一文帶你掌握Golang中panic與recover的使用方法
這篇文章主要介紹了Golang中panic與recover的作用和使用方法,文中的示例代碼講解詳細,具有一定的學習價值,需要的小伙伴可以參考一下2023-04-04Go語言調(diào)用ffmpeg-api實現(xiàn)音頻重采樣
最近對golang處理音視頻很感興趣,對golang音視頻常用庫goav進行了一番研究。自己寫了一個wav轉(zhuǎn)采樣率的功能。給大家分享一下,中間遇到了不少坑,解決的過程中還是蠻有意思的,希望大家能喜歡2022-12-12golang并發(fā)工具MapReduce降低服務響應時間
這篇文章主要為大家介紹了golang并發(fā)使用MapReduce降低服務響應時間實踐使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04