欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang爬蟲框架colly使用淺析

 更新時(shí)間:2023年05月15日 11:18:20   作者:q56731523  
這篇文章主要介紹了Golang爬蟲框架colly的使用,colly是Go實(shí)現(xiàn)的比較有名的一款爬蟲框架,而且Go在高并發(fā)和分布式場景的優(yōu)勢也正是爬蟲技術(shù)所需要的,感興趣想要詳細(xì)了解可以參考下文

Golang 是一門非常適合編寫網(wǎng)絡(luò)爬蟲的語言,它有著高效的并發(fā)處理能力和豐富的網(wǎng)絡(luò)編程庫。下面是一個(gè)簡單的 Golang 網(wǎng)絡(luò)爬蟲示例:

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)
}

這個(gè)爬蟲的功能是獲取指定網(wǎng)站的標(biāo)題。代碼中使用了 Go 的標(biāo)準(zhǔn)庫 net/http 和 regexp 來進(jìn)行網(wǎng)絡(luò)請求和正則表達(dá)式匹配。當(dāng)然,這只是一個(gè)簡單的示例,實(shí)際上爬蟲需要考慮更多的問題,比如反爬蟲、數(shù)據(jù)存儲、并發(fā)控制等等。

gocolly是用go實(shí)現(xiàn)的網(wǎng)絡(luò)爬蟲框架,我這里用來測試的版本是:colly “github.com/gocolly/colly/v2”

gocolly的網(wǎng)絡(luò)爬蟲還是很強(qiáng)大,下面我們通過代碼來看一下這個(gè)功能的使用

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)絡(luò)通信和負(fù)責(zé)在作業(yè)運(yùn)行時(shí)執(zhí)行附加的回掉函數(shù)
  c := colly.NewCollector(
    // 開啟本機(jī)debug
    colly.Debugger(&debug.LogDebugger{}),
  )
  //發(fā)送請求之前的執(zhí)行函數(shù)
  c.OnRequest(func(r *colly.Request) {
    fmt.Println("這里是發(fā)送之前執(zhí)行的函數(shù)")
  })
  //發(fā)送請求錯(cuò)誤被回調(diào)
  c.OnError(func(_ *colly.Response, err error) {
    fmt.Print(err)
  })
  //響應(yīng)請求之后被回調(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)
}

運(yùn)行結(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ā)生錯(cuò)誤被調(diào)用

OnResponse收到回復(fù)后被調(diào)用

OnHTML在OnResponse之后被調(diào)用,如果收到的內(nèi)容是HTML

OnScraped在OnHTML之后被調(diào)用

到此這篇關(guān)于Golang爬蟲框架colly使用淺析的文章就介紹到這了,更多相關(guān)Go colly框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你掌握Golang中panic與recover的使用方法

    一文帶你掌握Golang中panic與recover的使用方法

    這篇文章主要介紹了Golang中panic與recover的作用和使用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考一下
    2023-04-04
  • Go語言調(diào)用ffmpeg-api實(shí)現(xiàn)音頻重采樣

    Go語言調(diào)用ffmpeg-api實(shí)現(xiàn)音頻重采樣

    最近對golang處理音視頻很感興趣,對golang音視頻常用庫goav進(jìn)行了一番研究。自己寫了一個(gè)wav轉(zhuǎn)采樣率的功能。給大家分享一下,中間遇到了不少坑,解決的過程中還是蠻有意思的,希望大家能喜歡
    2022-12-12
  • golang開發(fā)微框架Gin的安裝測試及簡介

    golang開發(fā)微框架Gin的安裝測試及簡介

    這篇文章主要為大家介紹了golang微框架Gin的安裝測試及簡介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11
  • golang中validator包的使用教程

    golang中validator包的使用教程

    Validator 實(shí)際上是一個(gè)驗(yàn)證工具,屬于 golang 的第三方包,這個(gè)包中使用了各種反射技巧來提供了各種校驗(yàn)和約束數(shù)據(jù)的方式方法,下面就跟隨小編一起來學(xué)習(xí)一下validator包的使用吧
    2023-09-09
  • golang并發(fā)工具M(jìn)apReduce降低服務(wù)響應(yīng)時(shí)間

    golang并發(fā)工具M(jìn)apReduce降低服務(wù)響應(yīng)時(shí)間

    這篇文章主要為大家介紹了golang并發(fā)使用MapReduce降低服務(wù)響應(yīng)時(shí)間實(shí)踐使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • goland使用go mod模式的步驟詳解

    goland使用go mod模式的步驟詳解

    這篇文章主要介紹了goland使用go mod模式的步驟詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 解決go echo后端處理跨域的兩種操作方式

    解決go echo后端處理跨域的兩種操作方式

    這篇文章主要介紹了解決go echo后端處理跨域的兩種操作方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go爬蟲(http、goquery和colly)詳解

    Go爬蟲(http、goquery和colly)詳解

    goquery可以避免操作復(fù)雜的正則表達(dá)式,它可以直接根據(jù)url獲取一個(gè)Document對象,然后根據(jù)標(biāo)簽選擇器、類選擇器和id選擇器獲取相應(yīng)的選擇對象,進(jìn)行自定義的操作,這篇文章主要介紹了Go爬蟲(http、goquery和colly),需要的朋友可以參考下
    2022-09-09
  • Go語言開發(fā)技巧必知的小細(xì)節(jié)提升效率

    Go語言開發(fā)技巧必知的小細(xì)節(jié)提升效率

    這篇文章主要介紹了Go語言開發(fā)技巧必知的小細(xì)節(jié)提升效率,分享幾個(gè)你可能不知道的Go語言小細(xì)節(jié),希望能幫助大家更好地學(xué)習(xí)這門語言
    2024-01-01
  • golang高性能的http請求 fasthttp詳解

    golang高性能的http請求 fasthttp詳解

    fasthttp 是 Go 的快速 HTTP 實(shí)現(xiàn),當(dāng)前在 1M 并發(fā)的生產(chǎn)環(huán)境使用非常成功,可以從單個(gè)服務(wù)器進(jìn)行 100K qps 的持續(xù)連接,總而言之,fasthttp 比 net/http 快 10 倍,下面通過本文給大家介紹golang fasthttp http請求的相關(guān)知識,一起看看吧
    2021-09-09

最新評論