爬虫性能分析及优化

前两天我们写了单任务版爬虫爬取了珍爱网用户信息,那么它的性能如何呢?

我们可以通过网络利用率看一下,我们用任务管理器中的性能分析窗口可以看到下载速率大概是保持在了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

本文由“壹伴编辑器”提供技术支持由“壹伴编辑器”提供技术支持

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

扫码关注云+社区

领取腾讯云代金券