# colite **Repository Path**: i2worker/colite ## Basic Information - **Project Name**: colite - **Description**: Colly Lite,Colly精简版,一个Golang实现的轻量、快速、易用的爬虫框架。 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-03-08 - **Last Updated**: 2025-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Colite Colly Lite,Colly精简版,一个Golang实现的轻量、快速、易用的爬虫框架。 ## 一、首先声明 **版权归 [Colly](https://github.com/gocolly/colly) 所有** !**版权归 [Colly](https://github.com/gocolly/colly) 所有**!**版权归 [Colly](https://github.com/gocolly/colly) 所有**! ## 二、为啥要精简 + 去掉条件检测、环境参数等非常用功能,实现更加轻便、更加快速。 + 尽量减少依赖(仅依赖`goquery`包),压缩程序大小。 + 重写代码也是学习框架的重要方法。^-^ ## 三、精简的功能 ### 1. 过滤域名和网址(colly.go - Collector.AllowedDomains Collector.URLFilters) Colite聚焦逻辑比较清晰的网站数据抓取,一般需要限制抓取的域名和网址。 ### 2. 最大抓取深度(colly.go - Collector.MaxDepth) 一般通过程序自行控制数据抓取的深度。 ### 3. 缓存响应数据(colly.go - Collector.CacheDir httpBackend.Cache()) 如果不允许重复访问同个网址(默认不允许,设置`Collector.AllowURLRevisit`启用),缓存响应数据作用不大。 ### 4. 检测Robots.txt文件(colly.go - Collector.IgnoreRobotsTxt) 在抓取网站数据的,很少去检测Robots.txt文件吧。 ### 5. 检测响应数据的符编码(colly.go - Collector.DetectCharset) 可以通过`Request.ResponseCharacterEncoding`来指定字符编码,去掉自动检查可以减少依赖 ### 6. 发送GET请求之前先发送HEAD请求验证(colly.go - Collector.CheckHead) 一般也不会用到该功能。 ### 7. 从环境变量设置抓取参数(colly.go - envMap) 可以自行通过配置程序来设置抓取的参数。 ### 8. 通过函数设置程序参数(colly.go - CollectorOption) Collector的参数很多是公开属性,可以直接设置属性进行配置。 ### 9. Google App Engine模式(colly.go - Collector.Appengine()) 在国内Google App Engine基本上用不了。 ### 10. glob域名匹配规则(http_backend.go - LimitRule.DomainGlob) 程序中保留了正则表达式的域名匹配规则,去除glob模式可以减少依赖。 ### 11. HTTPTrace(http_trace.go) HTTPTrace主要用于分析网络请求性能,一般很少用到该功能。 ### 12. 通过Content-Disposition生成安全文件名(response.go) 主要用于下载文件时防止出现乱码文件名,一般很少用到该功能。 ### 13. 解析XML文档(xmlelement.go) 网站的数据大部分是HTML格式,很少用到XML解析功能。 ### 14. 通过结构标签解析HTML文档生成结构(unmarshal.go) 解析结构标签需要使用反射功能,可能影响速度,而且抓取网站数据需要多次清洗数据,很难通过标签直接生成对应结构。 ## 四、使用方法 ### 1. 安装 ``` go get -u gitee.com/i2worker/colite ``` ### 2. 示例 ```go func main() { // 生成Collector c := colite.NewCollector() // 查找并访问所有链接 c.OnHTML("a[href]", func(e *colite.HTMLElement) { e.Request.Visit(e.Attr("href")) }) // 打印访问的网站 c.OnRequest(func(r *colite.Request) { fmt.Println("Visiting", r.URL) }) // 开始抓取数据 c.Visit("https://www.baidu.com") } ``` **详细文档及示例可阅读[Colly官方文档](http://go-colly.org/docs/)** ## 五、程序框架 ### 1. Colite主要类图 ![Colite主要类图](./docs/colite1.png) ### 2. Colite主要流程图 ![Colite主要流程](./docs/colite2.png)