46

Golang搭建并行版爬虫信息采集框架

 5 years ago
source link: https://studygolang.com/articles/15244?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1.简介

Go语言在分布式系统领域有着更高的开发效率,提供了海量并行的支持。本博文介绍的是采用Go语言搭建一个并行版爬虫信息采集框架,博文中使用58同城中租房网页做案例。相比较其他爬虫程序它的优点是:

  • 1.抓取信息速度非常快,因为是并行处理的,通过配置协程数量,可以比普通的爬虫信息采集程序快上上百倍。
  • 2.功能模块化,每个功能模块各司其职,配置简单。通过修改信息抓取规则,就可以采集不同网站中的数据。

程序源代码放到github上,链接地址是: https://github.com/GuoZhaoran/crawler

2.项目架构

下面是项目整体架构的示意图:

bVbhNnK?w=1308&h=606

2.1 Request(请求)

该爬虫架构中Request请求可以理解为:抓取请求url的内容,例如抓取58同城北京市的租房信息时,请求的url是: https://bj.58.com/chuzu/

打开url会发现,网页页面中是房源列表信息,那么接下来要做的工作就是抓取房源详情信息和分页后的下一页房源列表信息。于是就会有新的请求Request,对应不同的url链接地址。

2.2 Worker(工作者)

我们在拿到Request请求之后,抓取到网页页面内容,就需要有单独的程序去解析页面,提取相关信息,这就是worker所要做的工作。

2.3 Request队列和Worker队列

Go语言在构建并行处理程序中有着天然的优势,在该框架中处理Request请求和使用Worker提取相关信息也都是并行工作的。程序中会同时存在着很多个Request,也会有很多个Worker在处理不同Request页面中的内容。所以分别需要一个Request队列和Worker队列来管理它们。

2.4 Scheduler(调度器)

调度器的职责是将Request分配给空闲的Worker来处理,实现任务调度。因为Request和Worker分别使用队列进行管理,可以通过调度器来控制程序的运行过程,例如:分配不同数量的Worker,将特定的Request分配给相应的Worker进行处理等。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK