Introduction
本文对colly如何使用,整个代码架构设计,以及一些使用实例的收集。
Colly是Go语言开发的Crawler Framework,并不是一个完整的产品,Colly提供了类似于Python的同类产品(BeautifulSoup
或 Scrapy
)相似的表现力和灵活性。
Colly这个名称源自 Collector
的简写,而Collector
也是 Colly的核心。
Colly Official Docs,内容不是很多,最新的消息也很就远了,仅仅是活跃在Github
Concepts
Architecture
从理解上来说,Colly的设计分为两层,核心层和解析层,
Collector
:是Colly实现,该组件负责网络通信,并负责在Collector
作业运行时执行对应事件的回调。Parser
:这个其实是抽象的,官网并未对此说明,goquery和一些htmlquery,通过这些就可以将访问的结果解析成类Jquery对象,使html拥有了,XPath选择器和CSS选择器
通常情况下Crawler的工作流生命周期大致为
- 构建客户端
- 发送请求
- 获取响应的数据
- 将相应的数据解析
- 对所需数据处理
- 持久化
而Colly则是将这些概念进行封装,通过将事件注册到每个步骤中,通过事件的方式对数据进行清理,抽象来说,Colly面向的是过程而不是对象。大概的工作架构如图
event
通过上述的概念,可以大概了解到 Colly
是一个基于事件的Crawler,通过开发者自行注册事件函数来触发整个流水线的工作
Colly 具有以下事件处理程序:
- OnRequest:在请求之前调用
- OnError :在请求期间发生错误时调用
- OnResponseHeaders :在收到响应头后调用
- OnResponse: 在收到响应后调用
- OnHTML:如果接收到的内容是 HTML,则在 OnResponse 之后立即调用
- OnXML :如果接收到的内容是 HTML 或 XML,则在 OnHTML 之后立即调用
- OnScraped:在 OnXML 回调之后调用
- OnHTMLDetach:取消注册一个OnHTML事件函数,取消后,如未执行过得事件将不会再被执行
- OnXMLDetach:取消注册一个OnXML事件函数,取消后,如未执行过得事件将不会再被执行
Reference
Utilities
简单使用
|
|
错误处理
|
|
处理本地文件
word.html
|
|
|
|
使用代理交换器
通过 ProxySwitcher
, 可以直接使用一批代理IP池进行访问了,然而这里只有RR,如果需要其他的均衡算法,需要有自己实现了
|
|
随机延迟
该功能可以对行为设置一种特征,以免被反扒机器人检测,并禁止我们,如速率限制和延迟
|
|
多线程请求队列
|
|
异步
默认情况下,Colly的工作模式是同步的。可以使用 Async
函数启用异步模式。在异步模式下,我们需要调用Wait
等待Collector
工作完成。
|
|
最大深度
深度是在访问这个页面时,其页面还有link,此时需要采集到入口link几层的link?默认1
|
|