原文連接:Hzy 博客
1.吐槽
這幾天準(zhǔn)備用go寫爬蟲來著,之前一直都是用python,python寫協(xié)程,我這菜雞也得又蛋疼,剛好又學(xué)了go,就想體驗(yàn)一把用go寫爬蟲的快感來著。
之前github上照著別人的思路,寫了一個(gè)簡單的并發(fā)爬蟲框架,對(duì)go的并發(fā),倒是學(xué)到了一點(diǎn)點(diǎn),無意間發(fā)現(xiàn)了colly,對(duì)比下別人的,在看自己寫的,唉...
2.colly簡單介紹使用
github: https://github.com/gocolly/colly
官網(wǎng): http://go-colly.org/
2.1 colly介紹
colly是一個(gè)爬蟲框架,通過他,我們能快的實(shí)現(xiàn)一個(gè)并發(fā)爬蟲,同簡單易懂,方便擴(kuò)展。
colly主要的東西就是Collector,通過Collector來收集訪問的數(shù)據(jù),并進(jìn)行存儲(chǔ)。(面向過程)
2.1 colly一個(gè)頁面的抓取時(shí)的過程中的回調(diào)
- 收集器請(qǐng)求前: onRequest()
- 收集器抓取失敗:onError()
- 收集器響應(yīng)后:onResponse()
- 收集器收到HTML:onHTML()
- 收集器收到XML: onXML()
- 收集器抓取完后最后執(zhí)行的回調(diào):onScraped()
通過浙這些回調(diào),我們就能很快寫出一個(gè)爬蟲,同時(shí)官網(wǎng)上也會(huì)有很多例子,供我們參考學(xué)習(xí),實(shí)在不行看看源碼。
2.2 colly中Collector的配置
- 具體配置信息可以在官網(wǎng)中查看到,這里就隨便說幾個(gè)。
- 爬蟲域名抓取限制,最大深度限制,是否爬取重復(fù)網(wǎng)站,避免死循環(huán)。
- 設(shè)置異步,并發(fā)數(shù)量,設(shè)置隨機(jī)延遲時(shí)間等
- http中是否保持長連接,限制連接數(shù)量等。
- 同時(shí)還支持分布式。
- 通過擴(kuò)展,我們還能設(shè)置隨機(jī)user-agent,reffer。
2.3 colly中的存儲(chǔ)
- 默認(rèn)存儲(chǔ)是在內(nèi)存中。
- 官網(wǎng)推薦的是存儲(chǔ)到redis中
- 同時(shí)還可以存儲(chǔ)到sqlite3,mongo中,官網(wǎng)上有相關(guān)的例子。
- colly-sqlite3存儲(chǔ)
- colly-mongo存儲(chǔ)
3.結(jié)尾
- 如要想要跟進(jìn)一步的了解,可以看看這篇文章:go爬蟲框架colly源碼以及軟件架構(gòu)分析 ,看看colly的設(shè)計(jì)結(jié)構(gòu)
- Colly源碼解析——結(jié)合例子分析底層實(shí)現(xiàn) 分析下colly源碼中主要的幾個(gè)函數(shù)。