go 爬蟲--colly基礎(chǔ)入門(一)

colly是用golang實現(xiàn)的一款常用的爬蟲框架护昧。它的主要特點是輕量莫其、快速癞尚,設(shè)計非常優(yōu)雅,并且分布式的支持也非常簡單榜配,易于擴展否纬。

如何安裝colly?

colly安裝的唯一先決條件:已安裝go的編程環(huán)境(畢竟是面向go語言的爬蟲框架)
然后僅需使用一行g(shù)o get命令即可完成安裝:

# 省略號是你想要安裝的版本
# 如:github.com/gocolly/colly/v2
go get -u github.com/gocolly/colly/... 

快速上手

安裝完成之后蛋褥,筆者借官方的demo來體驗colly的基礎(chǔ)使用方法临燃。附官方文檔的鏈接:官方文檔

1. 導(dǎo)入colly模塊

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

2.使用默認(rèn)的配置創(chuàng)建收集器

c := colly.NewCollector()

NewCollector()方法內(nèi)可以添加參數(shù)以更改收集器的配置。作為初學(xué)者烙心,這里暫時不作討論膜廊。

3.事件監(jiān)聽

事件監(jiān)聽,就是通過callbacks處理相關(guān)的事件淫茵。
將回調(diào)函數(shù)添加到收集器的事件監(jiān)聽函數(shù)中以控制收集的任務(wù)或搜索特點的信息爪瓜。例如使用c.OnHTML,收集器就會遍歷所有的html標(biāo)簽匙瘪。

// 遍歷所有的a標(biāo)簽铆铆,如果有href屬性就回調(diào)
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
        link := e.Attr("href")
        fmt.Printf("Link found: %q -> %s\n", e.Text, link)
        c.Visit(e.Request.AbsoluteURL(link))
    })

// 在請求之前打印“Visiting xxx”
c.OnRequest(func(r *colly.Request) {
        fmt.Println("Visiting", r.URL.String())
    })

這里列舉一下相關(guān)的事件類型:

  1. OnRequest 在請求之前調(diào)用
  2. OnError 如果在請求期間發(fā)生錯誤蝶缀,則調(diào)用
  3. OnResponseHeaders 在接收到響應(yīng)頭之后調(diào)用
  4. OnResponse 在收到回復(fù)后調(diào)用
  5. OnHTML 如果接收到的內(nèi)容是 HTML,則在 OnResponse 之后立即調(diào)用
  6. OnXML 如果接收到的內(nèi)容是 HTML 或 XML薄货,則在 OnHTML 之后調(diào)用
  7. OnScraped 在 OnXML 回調(diào)之后調(diào)用

4.指定收集器啟動時應(yīng)訪問的URL

c.Visit("https://hackerspaces.org/")

完整的代碼

package main

import (
    "fmt"

    "github.com/gocolly/colly"
)

func main() {
    // Instantiate default collector
    c := colly.NewCollector(
        // Visit only domains: hackerspaces.org, wiki.hackerspaces.org
        colly.AllowedDomains("hackerspaces.org", "wiki.hackerspaces.org"),
    )

    // On every a element which has href attribute call callback
    c.OnHTML("a[href]", func(e *colly.HTMLElement) {
        link := e.Attr("href")
        // Print link
        fmt.Printf("Link found: %q -> %s\n", e.Text, link)
        // Visit link found on page
        // Only those links are visited which are in AllowedDomains
        c.Visit(e.Request.AbsoluteURL(link))
    })

    // Before making a request print "Visiting ..."
    c.OnRequest(func(r *colly.Request) {
        fmt.Println("Visiting", r.URL.String())
    })

    // Start scraping on https://hackerspaces.org
    c.Visit("https://hackerspaces.org/")
}

執(zhí)行程序可以清晰地看到翁都,在對指定URL訪問前先打印了“Visiting xxx”,然后爬取網(wǎng)頁中a標(biāo)簽的href屬性谅猾,并打印到控制臺柄慰,如截圖所示,https://wiki.hackerspaces.org網(wǎng)頁中有一個a標(biāo)簽內(nèi)容為navigation税娜,其href屬性為#column-one坐搔。

爬取的href和標(biāo)簽內(nèi)容.png

wiki.hackerspaces.org的網(wǎng)頁源碼.png

結(jié)語

可以看到colly的爬蟲框架非常簡潔,結(jié)合go的并發(fā)特征敬矩,會給爬蟲帶來很高的效率概行。美中不足的是目前文檔不是很多,需要持續(xù)地消化谤绳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末占锯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缩筛,更是在濱河造成了極大的恐慌消略,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞎抛,死亡現(xiàn)場離奇詭異艺演,居然都是意外死亡,警方通過查閱死者的電腦和手機桐臊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門胎撤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人断凶,你說我怎么就攤上這事伤提。” “怎么了认烁?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵肿男,是天一觀的道長。 經(jīng)常有香客問我却嗡,道長舶沛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任窗价,我火速辦了婚禮如庭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撼港。我一直安慰自己坪它,他們只是感情好骤竹,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著往毡,像睡著了一般瘤载。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卖擅,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音墨技,去河邊找鬼惩阶。 笑死,一個胖子當(dāng)著我的面吹牛扣汪,可吹牛的內(nèi)容都是我干的断楷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼崭别,長吁一口氣:“原來是場噩夢啊……” “哼冬筒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茅主,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤舞痰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后诀姚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體响牛,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年赫段,在試婚紗的時候發(fā)現(xiàn)自己被綠了呀打。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡糯笙,死狀恐怖贬丛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情给涕,我是刑警寧澤豺憔,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站稠炬,受9級特大地震影響焕阿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜首启,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一暮屡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毅桃,春花似錦褒纲、人聲如沸准夷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衫嵌。三九已至,卻和暖如春彻秆,著一層夾襖步出監(jiān)牢的瞬間楔绞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工唇兑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酒朵,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓扎附,卻偏偏與公主長得像蔫耽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子留夜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容