您的位置:新闻资讯 >文章内容
爬虫怎么加快速度采集?使用多线程还是多进程好
来源:互联网 作者:admin 时间:2018-12-17 15:13:02

    现在网页信息比较多,即使是小的网站数据也不少,更何况大网站,如果想要采集大量数据,爬虫怎么加快速度采集

    如果还是按照单线爬虫的采集速度,企业根本没有时间耗,快速采集数据并挖掘有效信息是企业使用爬虫的目的,达不到目的,就不需要使用爬虫了。

    其实是有许多方法来加快速度采集的,下面小编就为大家分享一下爬虫怎么加快速度采集。

    一、改变线程数目

    假设线程数为n,线程中下载平均用时为td,线程中数据处理部分(纯计算)用时为tc。由于单个Python进程只能使用单CPU核心,因此总的数据处理耗时应是各线程tc的累加即n*tc。因为下载是阻塞操作,CPU可以几乎同时处理所有下载,因此总的下载耗时就近似为td。那么Python爬虫的下载速度应为:

    

爬虫怎么加快速度采集?使用多线程还是多进程好


    等式稍作变换后为:

    

爬虫怎么加快速度采集?使用多线程还是多进程好

    对于特定的网站td为定值(常量),对于特定的数据处理算法tc也近似为定值。所以下载速度的最大值也不会超过1/tc。试想一下,如果线程函数内数据处理部分耗时为0.1秒,那么不管线程数再大,整体的速度也不会超过10个/秒。线程数n的增大的确能够使得v增大,但是如果tc值较大,n的值达到一定程度后对v的影响就很小了。假设tc = 0.1,td = 3,那么 v = 1/(0.1+3/n)的函数图象应为如下图所示:

    

爬虫怎么加快速度采集?使用多线程还是多进程好

 

    由图可以看出当n在100以后对v的影响就不大了。因此不能盲目的增大线程数n。线程数越大消耗的系统资源就越多,同时过多的CPU切换反而会增加整体花费的时间。

    二、改变进程数目

    如何让你的爬虫跑的更快呢?通过上面的分析我们知道单个Python爬虫进程最大速度为1/tc。如果我们同时启动m个进程,那么整体的速度就能提高m倍。但是m的值也不是越大越好,因为进程的系统开销比线程还要大。一般进程数取CPU的核心数的为宜(具体可视实际CPU使用率情况调整)。

    如下图所示,为我们在一4核机器上同时启动4进程的情况。只启动一个进程时速度最大仅为13个/秒,同时启动4个进程,整体的速度就达到约50个/秒。

    

爬虫怎么加快速度采集?使用多线程还是多进程好

    另外,Python虽然有multiprocessing库,但是我们实际测试其速度远没有真正的多个独立进程快。因此建议用真正的“多进程”。

    多进程的设计增加了程序的开发难度。主要要解决两大问题:

    1.输入(任务队列)。多进程要共享一个任务队列。如果该任务队列方案支持网络,那么就很容易把采集系统做成真正的分布式集群采集。

    2.输出。简单的做法就是直接把数据写入数据库,但是在爬虫程序内频繁操作数据库势必会增加耗时。一个较好的方案是将输出先写入消息队列,然后用一单独进程来处理消息队列。

    爬虫怎么加快速度采集?综上所述,想要加快速度采集可以使用多线程与多进程,二者相比,多进程效果会更好些。


相关文章内容简介
在线咨询
微信公众号

微信公众号

回到顶部