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