最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang爬蟲框架colly使用淺析

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

Golang 是一門非常適合編寫網(wǎng)絡(luò)爬蟲的語(yǔ)言,它有著高效的并發(fā)處理能力和豐富的網(wǎng)絡(luò)編程庫(kù)。下面是一個(gè)簡(jiǎn)單的 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)庫(kù) net/http 和 regexp 來進(jìn)行網(wǎng)絡(luò)請(qǐng)求和正則表達(dá)式匹配。當(dāng)然,這只是一個(gè)簡(jiǎn)單的示例,實(shí)際上爬蟲需要考慮更多的問題,比如反爬蟲、數(shù)據(jù)存儲(chǔ)、并發(fā)控制等等。

gocolly是用go實(shí)現(xiàn)的網(wǎng)絡(luò)爬蟲框架,我這里用來測(cè)試的版本是: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對(duì)象,管理網(wǎng)絡(luò)通信和負(fù)責(zé)在作業(yè)運(yùn)行時(shí)執(zhí)行附加的回掉函數(shù)
  c := colly.NewCollector(
    // 開啟本機(jī)debug
    colly.Debugger(&debug.LogDebugger{}),
  )
  //發(fā)送請(qǐng)求之前的執(zhí)行函數(shù)
  c.OnRequest(func(r *colly.Request) {
    fmt.Println("這里是發(fā)送之前執(zhí)行的函數(shù)")
  })
  //發(fā)送請(qǐng)求錯(cuò)誤被回調(diào)
  c.OnError(func(_ *colly.Response, err error) {
    fmt.Print(err)
  })
  //響應(yīng)請(qǐng)求之后被回調(diào)
  c.OnResponse(func(r *colly.Response) {
    fmt.Println("Response body length:", len(r.Body))
  })
  //response之后會(huì)調(diào)用該函數(shù),分析頁(yè)面數(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ā)起請(qǐng)求前被調(diào)用

OnError請(qǐng)求過程中如果發(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放

    Go語(yǔ)言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放

    這篇文章主要為大家介紹了Go語(yǔ)言開發(fā)瀏覽器視頻流rtsp轉(zhuǎn)webrtc播放的過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • 淺析Golang中閉包的創(chuàng)建與使用

    淺析Golang中閉包的創(chuàng)建與使用

    閉包是包括?Go?在內(nèi)的編程語(yǔ)言的一項(xiàng)強(qiáng)大功能,通過閉包,您可以在函數(shù)中封裝數(shù)據(jù),并通過函數(shù)的返回值訪問這些數(shù)據(jù),本文將介紹Go?中閉包的基礎(chǔ)知識(shí),希望對(duì)大家有所幫助
    2023-11-11
  • 淺談Go語(yǔ)言的空標(biāo)示符

    淺談Go語(yǔ)言的空標(biāo)示符

    本文通過文字及實(shí)例介紹了Go語(yǔ)言的空標(biāo)示符,對(duì)此有不明白的朋友可以參考學(xué)習(xí),下面一起來看看吧。
    2016-08-08
  • Golang 實(shí)現(xiàn)分片讀取http超大文件流和并發(fā)控制

    Golang 實(shí)現(xiàn)分片讀取http超大文件流和并發(fā)控制

    這篇文章主要介紹了Golang 實(shí)現(xiàn)分片讀取http超大文件流和并發(fā)控制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go計(jì)時(shí)器的示例代碼

    Go計(jì)時(shí)器的示例代碼

    定時(shí)器是任何編程語(yǔ)言的重要工具,它允許開發(fā)人員在特定時(shí)間間隔安排任務(wù)或執(zhí)行代碼,本文主要介紹了Go計(jì)時(shí)器的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • golang官方嵌入文件到可執(zhí)行程序的示例詳解

    golang官方嵌入文件到可執(zhí)行程序的示例詳解

    這篇文章主要介紹了golang官方嵌入文件到可執(zhí)行程序,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 在Go中實(shí)現(xiàn)和使用堆棧以及先進(jìn)先出原則詳解

    在Go中實(shí)現(xiàn)和使用堆棧以及先進(jìn)先出原則詳解

    Go是一種功能強(qiáng)大的編程語(yǔ)言,提供了豐富的數(shù)據(jù)結(jié)構(gòu)和算法,堆棧是計(jì)算機(jī)科學(xué)中的基本數(shù)據(jù)結(jié)構(gòu)之一,在本博文中,我們將探討如何在?Go?中實(shí)現(xiàn)和使用堆棧,以及堆棧如何遵循先進(jìn)先出?(FIFO)?原則
    2023-10-10
  • golang time包的用法詳解

    golang time包的用法詳解

    這篇文章主要介紹了golang time包的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 詳解Golang中創(chuàng)建error的方式總結(jié)與應(yīng)用場(chǎng)景

    詳解Golang中創(chuàng)建error的方式總結(jié)與應(yīng)用場(chǎng)景

    Golang中創(chuàng)建error的方式包括errors.New、fmt.Errorf、自定義實(shí)現(xiàn)了error接口的類型等,本文主要為大家介紹了這些方式的具體應(yīng)用場(chǎng)景,需要的可以參考一下
    2023-07-07
  • Go使用TimerController解決timer過多的問題

    Go使用TimerController解決timer過多的問題

    多路復(fù)用,實(shí)際上Go底層也是一種多路復(fù)用的思想去實(shí)現(xiàn)的timer,但是它是底層的timer,我們需要解決的問題就過多的timer問題!本文給大家介紹了Go使用TimerController解決timer過多的問題,需要的朋友可以參考下
    2024-12-12

最新評(píng)論

九龙城区| 郎溪县| 黄骅市| 柘荣县| 哈巴河县| 万宁市| 苏尼特左旗| 华亭县| 绥棱县| 桃园市| 辽宁省| 建宁县| 利辛县| 罗田县| 丽水市| 嫩江县| 抚顺县| 张家口市| 洞头县| 家居| 江城| 玛多县| 荔波县| 鹤庆县| 莒南县| 太湖县| 阿克苏市| 青神县| 双鸭山市| 融水| 儋州市| 彭山县| 蒙自县| 东海县| 桑日县| 泌阳县| 留坝县| 泰顺县| 集安市| 双流县| 留坝县|