国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Colly 并行爬?。憾嗑€程爬蟲加速實戰(zhàn)

2025-07-11 18:32 更新

單線程爬蟲太慢?用 CollyAsyncLimit,輕松開啟多線程爬蟲,速度提升 N 倍!

一、示例:

package main


import (
    "fmt"


    "github.com/gocolly/colly/v2"
)


func main() {
    // 創(chuàng)建默認(rèn)收集器,限制最大深度為 2,開啟異步
    c := colly.NewCollector(
        colly.MaxDepth(2), // 只爬取首頁 + 一層鏈接
        colly.Async(true), // 開啟異步
    )


    // 限制最大并行數(shù)為 4
    c.Limit(&colly.LimitRule{
        DomainGlob:  "*",    // 對所有域名生效
        Parallelism: 4,      // 最大并行數(shù)
    })


    // 每次發(fā)現(xiàn) <a href="..."> 標(biāo)簽就打印并繼續(xù)訪問
    c.OnHTML("a[href]", func(e *colly.HTMLElement) {
        link := e.Attr("href")
        fmt.Println("發(fā)現(xiàn)鏈接:", link)


        // 自動補全絕對路徑后再訪問
        absoluteURL := e.Request.AbsoluteURL(link)
        e.Request.Visit(absoluteURL)
    })


    // 在請求前打印日志
    c.OnRequest(func(r *colly.Request) {
        fmt.Println("正在訪問:", r.URL.String())
    })


    // 從編程獅首頁開始
    c.Visit("http://eska-fuses.cn/")


    // 等待所有線程完成
    c.Wait()
}

運行結(jié)果(多線程并發(fā)訪問):

正在訪問: http://eska-fuses.cn/
發(fā)現(xiàn)鏈接: http://eska-fuses.cn/go
正在訪問: http://eska-fuses.cn/go
發(fā)現(xiàn)鏈接: http://eska-fuses.cn/python
正在訪問: http://eska-fuses.cn/python
...

二、并行爬取的 3 個關(guān)鍵點

關(guān)鍵點 說明 示例代碼
開啟異步 使用 colly.Async(true) 開啟異步模式 colly.Async(true)
限制并行數(shù) 使用 Limit 方法限制最大并行數(shù) c.Limit(&colly.LimitRule{Parallelism: 4})
等待線程完成 使用 Wait 方法等待所有線程完成 c.Wait()

三、完整實戰(zhàn):爬取編程獅首頁及兩層鏈接

假設(shè)你想爬取編程獅首頁及其兩層鏈接,并限制最大并行數(shù)為 4,完整代碼如下:

package main


import (
    "fmt"


    "github.com/gocolly/colly/v2"
)


func main() {
    // 創(chuàng)建默認(rèn)收集器,限制最大深度為 2,開啟異步
    c := colly.NewCollector(
        colly.MaxDepth(2), // 只爬取首頁 + 一層鏈接
        colly.Async(true), // 開啟異步
    )


    // 限制最大并行數(shù)為 4
    c.Limit(&colly.LimitRule{
        DomainGlob:  "*",    // 對所有域名生效
        Parallelism: 4,      // 最大并行數(shù)
    })


    // 每次發(fā)現(xiàn) <a href="..."> 標(biāo)簽就打印并繼續(xù)訪問
    c.OnHTML("a[href]", func(e *colly.HTMLElement) {
        link := e.Attr("href")
        fmt.Println("發(fā)現(xiàn)鏈接:", link)


        // 自動補全絕對路徑后再訪問
        absoluteURL := e.Request.AbsoluteURL(link)
        e.Request.Visit(absoluteURL)
    })


    // 在請求前打印日志
    c.OnRequest(func(r *colly.Request) {
        fmt.Println("正在訪問:", r.URL.String())
    })


    // 從編程獅首頁開始
    c.Visit("http://eska-fuses.cn/")


    // 等待所有線程完成
    c.Wait()
}

四、常見問題速查

現(xiàn)象 原因 解決方法
爬取速度慢 并行數(shù)設(shè)置太小 增大 Parallelism 值
程序崩潰 并行數(shù)設(shè)置太大 減小 Parallelism 值
鏈接重復(fù)爬取 沒有正確設(shè)置 AllowedDomains 檢查 AllowedDomains 是否包含目標(biāo)域名

五、1 分鐘實驗

  1. 打開 Go 環(huán)境 → 新建 main.go
  2. 復(fù)制上方代碼 → 運行。
  3. 觀察終端:多線程并發(fā)訪問,速度明顯提升。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號