爬虫对本身服务器 CPU,内存和网速的影响

今天无事写一遍关于爬虫对计算机的影响,主要是给小白同窗普及一下爬虫的基础知识。python

  在咱们写爬虫的时候,首先会想到开多线程,若是使用的语言是Python,很不幸,由于Python存在  GIL,在任什么时候候,CPU内只有一条线程在运行,可是Python的多线程也能提升爬虫的速度,而且咱们用python的多线程去写爬虫的时候,速度并不慢,这是为什么呢?由于爬虫是偏向于io的,网络IO和磁盘io是爬虫的最大瓶颈,如今CPU的处理速度很快,相对于请求来讲,CPU的速度更快。网络请求须要等待对方服务器的响应,这个过程比较慢。而下载到数据后往本身数据库插入数据须要等待本身的磁盘响应。那么有没有一个更好的方法实现爬虫的并发下载呢?数据库

  答案是 : 有,咱们可使用第三方的框架,好比使用异步框架 gevent,tornado等,或者是Python的多进程+ 异步方法,能够大大的提升咱们的下载速度。服务器

  

  直接粘贴两张图片,第一种是消耗CPU和内存和带宽,第三张图片是多进程使用。网络

  

                    第一种图片多线程

 

  

        第二种图片并发

 

 

  在爬取某个网站的时候,同时开启了64个进程,而且是异步的方法,下载速度稳定在700k左右,由于公司运维给网络限速了,不可能提升网速了,而后是内存消耗是87%,内存是12G,CPU消耗是百分之百,CPU消耗为什么这么高呢?主要是数据解析须要消耗CPU和进程切换也须要消耗CPU。一个网页的大小应该在10k到20k之间,粗略统计一下,一分钟能下载1750个网页,包括数据的下载,解析和入库整个过程。这个下载速度是1750*60分钟 等于105000,也就是说一个小时是能下载十万个网页。框架

  这个速度怎么样?我以为这个下载速度是很是的慢,为什么,由于这个网址他封ip了,须要经过代理去访问他们的服务器,这也是很是耗时的一个过程,只能经过ip池去解决,ip池里面维护了1000左右有效ip,而且有专门的服务去作验证,能够随时抽取一个ip去抓取目标网站。理想的状态是一分钟抓取3000条数据,一天24小时抓取500万左右个网页数据。运维

  小伙伴是否是很惊讶?网络百分之九十的流量都是爬虫给贡献的,爬虫给目标网站形成了不小的压力,为了不给目标网站形成破坏,不建议开启过多的并发。异步

相关文章
相关标签/搜索