前两天我们写了单任务版爬虫爬取了珍爱网用户信息,那么它的性能如何呢?
我们可以通过网络利用率看一下,我们用任务管理器中的性能分析窗口可以看到下载速率大概是保持在了200kbps左右,这可以说是相当慢了。
我们针对来通过分析单任务版爬虫的设计来看下:
从上图我们可以看出,engine将request从任务队列取出来,送到Fetcher取获取资源,等待数据返回,然后将返回的数据送到Parser去解析,等待其返回,把返回的request再加到任务队列里,同时把item打印出来。
慢就慢在了没有充分利用网络资源,其实我们可以同时发送多个Fetcher和Pareser,等待其返回的同时,可以去做其他的处理。这一点利用go的并发语法糖很容易实现。
上图中,Worker是Fetcher和Parser的合并,Scheduler将很多Request分发到不同的Worker,Worker将Request和Items返回到Engine,Items打印出来,再把Request放到调度器里。
基于此用代码实现:
Engine:
Scheduler:
Worker:
main函数:
这里开启100个Worker,运行后再次查看网络利用率,变为3M以上。
由于代码篇幅较长,需要的同学可以关注公众号回复:go爬虫获取。
最后,大家想学公众号运营的不要错过,IT界最强的公众号团队交流圈子,由小程序——抽奖助手作者Fenng大辉,互联网 张哥『知名互联网大咖』带队,两小时三百多人加入,现在已经1000多人,目前价格美丽,不要犹豫,带你一起玩转公众号,提高认知,加入立返8元哦!
END
本文由“壹伴编辑器”提供技术支持由“壹伴编辑器”提供技术支持
领取专属 10元无门槛券
私享最新 技术干货