一、介绍
这是一个用go语言实现的网络爬虫框架,本框架的核心在于可定制和可扩展,用户可以根据自己的需要定制各个模块,同时,也给出了一个实现demo供参考。Go语言的初学者也可以通过这个项目熟悉go语言的各种特性,尤其是并发编程。
二、项目框架介绍
该网络爬虫主要由五个部分组成:调度器、中间件、下载器、分析器、条目处理器。下面分别介绍每部分的功能。
三、数据流
输入首次请求的网站之后,下载响应网站形成响应数据传送给分析器,分析器分离其中的链接和要处理的条目,链接形成下一层请求给调度器缓存起来,条目发送给条目处理管道进一步处理,最后给出最终处理结果。
四、各模块接口设计
1、调度器
(1)调度器主体
主要用于启动和停止整个系统,并且从中获取一些系统运行的状态。
(2)系统信息摘要
通过此接口获取系统的整体情况
(3)缓存
一般来说一个页面会有多个链接,这样会导致深一层的请求远多于下载器的下载线程,所以需要先把一部分请求缓存起来,等到下载线程空闲再发送出去。
(4)监控器
监控整个系统的运行,在所有线程都结束之后及时返回信号,以便于调度器主体终止整个系统。
2、中间件
(1)ID生成器
生成一个系统中唯一的ID,保证下载器池和分析器池的唯一性。
(2)抽象池
从下载器池和分析器池中抽象出来的票池,方便控制goroutine的数量。其中,Entity可以理解为上一个接口中的唯一ID实体。
(3)停止信号
由于本框架是多线程的,所以需要一个信号来关闭整个系统。
(4)通道管理
由于本系统是多线程的,所以将通道管理放在一起方便管理,分别管理请求通道、响应通道、条目处理通道、错误通道。
3、下载器
用于根据请求下载响应的网页。
4、分析器
获取下载器下载的内容,进一步分析,剥离出下一层请求和需要处理的条目。
5、条目处理管道
分别处理每一个条目,并且通过管道发送错误信息。
6、其他基础结构
五、扩展
本框架的初级版可以定制响应解析函数和条目处理函数,根据自己的需求实现。如果有需要的话,下载代码之后更改demo中的ParseResponse、ProcessItem 函数即可定制。更进一步的,可以跟据自己的需求实现上述框架中的接口,改变数据处理方式。
六、Golang爬虫资源获取
关注“小黑格子屋”公众号
领取专属 10元无门槛券
私享最新 技术干货