轻松搞定Golang爬虫实战

一、介绍

这是一个用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爬虫资源获取

关注“小黑格子屋”公众号

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181015B1HWV700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券