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
这个版本还是蛮好懂的。这里注明了,大概的一个流程。想了解详细还是看源码的好。