大家都知道收集数据是需要时间的,但是我们不能永远等下去,尤其是需要收集大量数据的时候,所以如何提高爬虫采集的效率是非常关键的。下面我们来看看如何提高爬虫采集的效率。
1.尽量减少网站访问。
单个爬虫主要是花时间等待网络请求的响应,所以可以减少网站访问,既减少了自身的工作量,也减少了网站的压力和被屏蔽的风险。
第一步是优化流程,尽可能精简。如果某些数据可以在一个网页而不是多个网页中获取,那么只能在一个网页中获取。
那么减肥也是一个很重要的手段。一般通过url或者id来判断唯一性,已经爬的就不会继续爬了。
2.分布式爬虫
即使用尽了各种方法,单台计算机在单位时间内能够抓取的网页数量仍然有限,面对大量的网页队列,计算时间仍然很长。在这种情况下,必须使用机器来改变时间,也就是所谓的分布式爬虫。
第一步,分配不是爬行动物的本质,也不是必须的。对于相互独立、没有通信的任务,可以手动划分任务,然后在多台机器上执行,这样就减少了每台机器的工作量,时间消耗翻倍。
比如有200W个网页需要抓取,5台机器可以不重复抓取40W个网页,那么单台机器的耗时会缩短5倍。
但是如果有通信的需要,比如要爬取的队列是变化的,那么这个队列每次爬取都会发生变化,即使任务划分了,也会有重叠和重复,因为程序运行时每台机器都有不同的队列要爬取——这种情况下只能分布,一个主存储队列,一个从存储队列,这样一个队列就可以共享,即使互斥也不会重复爬取。Scrapy-redis是一个广泛使用的分布式爬虫框架。
以上介绍了两种提高爬虫采集效率的方法。我想大家都知道如何提高收藏效果,在采集的过程中,还要注意目标网站的反抓取机制,动态ip模拟器将永远与你同在。