golang实现并发爬虫一(单任务版本爬虫功能)

目的是写一个golang并发爬虫版本的演化过程。

那么在演化之前,当然是先跑通一下单任务版本的架构。

正如人走路之前是一定要学会爬走一般。

首先看一下单任务版本的爬虫架构,如下:

这是单任务版本爬虫的一个架构:

第一步是将seed送到engine里去。

第二步是将seed里的url给到fetcher,fetcher会从网络上获取文本内容。

第三步是将获取下来的文本内容给到parser,parser会根据一定的转换规则获取到request和需要打印或者存储的item给到engine里。

其中parser返回的request会继续给到engine里维护的一个队列中去,只要request有值就会一直去fethcer和parser。

另外这里的fetcher和parser因为fetcher的返回值是parse的传入参数值,所以这里其实可以合并成一个模块,比如一个叫worker的模块。

后面升级的架构就只有worker模块,fetcher和parser则只是worker模块里的实现模块了。

 

目前,此版本架构的缺点:

1.没有很好的利用golang的channel,engine里一直是处于单任务的状态。尤其是fetcher模块,这里获取网络里的内容会格外的需要时间一些。

 

此单任务版本可有源码?

有,地址如下:

https://github.com/anmutu/du_crawler/tree/master/02crawler

 

这个版本还是蛮好懂的。这里注明了,大概的一个流程。想了解详细还是看源码的好。

posted @ 2020-04-18 13:54  公子若不胖天下谁胖  阅读(774)  评论(0编辑  收藏  举报